.Net转Java自学之路—基础巩固篇七(接口、多态)
接口 interface implements(实现)
当抽象类的方法都是抽象的时,这时把该类定义成接口
接口可称为特殊的抽象类。
特点:
1、接口的方法都是抽象的
2、接口不可以被实例化
3、只有子类实现了接口中的所有方法后,该子类才可以实例化,否则该子类还是抽象类。
格式特点:
接口中常见的成员:1、全局常量;2、抽象方法;
接口中的成员都有固定的修饰符:全局常量:public static final 成员方法:public abstract 修饰符可省略
类只能单继承。接口可以被多实现,因为接口中方法没有主体。但接口与接口之间可以多继承
接口的基本思想:
1、接口就是对外暴露的规则。
2、接口是功能的扩展。
3、接口的出现降低了耦合性。
抽象类与接口的区别:
1、抽象类只能被单继承;接口可以被多实现
2、抽象类中可以定义非抽象方法,直接被子类使用;接口中只有抽象方法,必须被子类实现后才能使用。
3、抽象类中定义体系中基本共性功能;接口中定义体系中的扩展功能。
4、接口避免了单继承的局限性。
5、抽象类被继承,是 is a(所属)关系;接口可以被实现 是like a(像)关系。
多态:
一个具体的动作,具备多种体现类型。
1、在程序中的体现:父类引用或者接口引用指向了自己子类的对象。
2、好处:提高代码扩展性,后期的维护性。
3、前提:
1、类与类之间必须有继承或实现关系
2、同常都需要覆盖
4、弊端:
进行多态应用时,前期是并不知道后期会有多少个子类出现,但可以使用父类引用来调用父类的方法。而后期那个子类对象出现就执行那个子类的具体方法类实现。这是程序的扩展性。但是,前期调用时,只能调用父类的方法,而不能调用具体子类的特有方法。因前期不知道具体的子类。
父类对象指向子类类型,那么该子类就自动提升为了父类类型。例:父类 fu=new 子类() 转换后提升后的子类可用“(子类)”强转成该子类对象。
判断类型:instanceof
对象 instanceof 类型
在多态中:
成员变量:
编译时期:看的引用型变量所属的类中是否有所调用的变量.
运行时期:也是看引用型变量所属的类是否有调用的变量。
简单一句话:成员变量,无论编译还是运行都看引用型变量所属的类。
更简单的话:成员变量,编译和运行都看 等号 的左边。
成员函数:
编译时期:看的引用型变量所属的类中是否有调用的方法。
运行时期:看的对象所属的类中是否有调用的方法,
如果父子出现同名方法,会运行子类中的方法。因为方法有覆盖特性。
简单说:对于成员函数,编译看左边,运行看右边。
其实非静态函数,在内存有一个动态绑定机制。其实就是f指向了具体的子类对象。
编译看到的f所属的Fu类中是否有这个方法。
运行的时候f就绑定到了一个具体的子类对象上,
子类对象运行时会覆盖父类中的相同想法,而运行子类的内容。
静态函数:
编译时期:看的是引用型变量所属的类中是否有调用的方法。
运行时期:也是看的是引用型变量所属的类中是否有调用的方法。
简单说: 对于静态函数,编译看左边,运行也看左边.
整体总结:
成员变量和静态成员:编译和运行都看左边。
只有非静态的成员函数:编译看左边,运行看右边。