不妄求,则心安,不妄做,则身安
多态:
生活中的多态:同一个事物,作用条件不一样,结果不一样
java中的多态:同一个父类引用,指向不同的子类实例,执行不同的操作,方法重写是实现多态的前提
多态实现步骤:
在抽象父类中定义抽象方法
子类继承抽象父类并重写父类中所有的抽象方法
测试类中创建父类引用指向不同的子类实例,父类引用调用方法,调用的是子类重写后的哪些方法
向上转型(自动类型转换):父类的引用指向子类的实例
向下转型(强制类型转换):子类的引用指向父类的实例
通过向上转型创建的父类引用,在调用方法的时候,如果指向的子类实例重写了其要调用的方法,那么调用的是子类重写后的方法,如果子类没有进行进行重写,那调用的就是父类里的方法。
父类的引用无法调用子类里独有的方法,必须使用向下转型成对应的子类,才能通过子类去调用子类中独有的方法在向下转型的时候,容易出现ClassCastException(类型转换异常),原因是将父类引用转换成了不匹配的子类对象,可以通过instanceof关键字类判断父类引用指向的是哪一个子类实例,从而避免类型转换异常。
/* * 抽象方法:使用abstract修饰的方法为抽象方法 * 1)抽象方法没有方法体 * 2)抽象方法所在的类需要声明为抽象类 * 3)子类继承一个抽象类后,子类中必须重写抽象父类中所有的抽象方法,如果不重写,那么子类也需要定义为抽象类 * * 抽象类:使用abstract修饰的类为抽象类 * 1)抽象类的声明跟之前声明一个类没有太大的区别,依然可以封装属性、声明构造方法、声明getXxx()/setXxx()方法、重写toString()方法等 * 2)抽象类中可以包含抽象方法、也可以不包含抽象方法(但是抽象方法所在的类一定要声明为抽象类) * 3)抽象类不能实例化(不能通过new的方式来创建对象) */
接口
接口的概念:
1、接口是一种约定
2、接口的使用:
接口中的成员变量,默认都是public static final的,必须显示初始化
接口中的方法,默认都是public abstatic的
接口没有构造方法,不能被实例化
一个接口不能实现另一个接口,但可以继承多个其他接口
一个类必须实现接口抽象方法(implements),除非这个类也是抽象类
3、抽象类与接口的异同
相同点
代表系统的抽象层
都不能被实例化
都能包含抽象方法
用于描述系统提供的服务,不必提供具体实现
不同点
在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法
抽象类便于复用,接口便于代码维护
一个类只能继承一个直接的父类,但可以实现多个接口
4.使用原则
接口做系统与外界交互的窗口
接口提供服务
接口本身一旦制定,就不允许随意修改
抽象类可完成部分功能实现,还有部分功能可作为系统的扩展点
5、总结
Java中的接口
属性全都是全局静态常常量
方法都是全局抽象方法
无构造方法
一个类可以实现多个接口,非抽象类实现接口时必须实现接口中的全部方法
抽象类利于代码复用,接口利于代码维护