抽象类和接口的异同:
相同点:都是不断向上抽取而来的
不同点:
1.抽象类需要被继承,而且只能单独继承。
接口需要被实现,而且可以多实现。
2.抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。
接口中只能定义抽象方法,必须由子类去实现。
3.抽象类的继承,是 is a 关系,在定义该体系的基本共性内容。
接口的实现是 like a 关系,在定义体系的额外功能。
instanceof 例:a instanceof person 用于判断对象的具体类型,只能用于引用数据类型判断
通常在向下转型前用于健壮性的判断。
多态在代码中的体现:父类或者接口的引用指向其子类的对象。
多态的好处:提高代码的扩展性,前期定义的代码可以使用后期的内容。
多态的弊端:前期定义的内容不能使用(调用)后期子类的特有内容。
多态时:
1.成员变量:
编译时,参考引用型变量所属的类中是否有调用的成员变量,有,编译成功;没有,编译失败。
运行时,参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量。
简单的说:编译运行都参考等号的左边。
2.成员函数(非静态):
编译时,参考引用型变量所属的类中是否有调用函数,有,编译成功;没有,编译失败。
运行时,参考的是对象所属的类中是否有调用的函数。
简单的说:编译看左边,运行看右边。
3.静态函数:
编译时,参考引用型变量所属的类中是否有调用的静态方法。
运行时,参考引用型变量所属的类中是否有调用的静态方法。
简单的说:编译和运行都看左边。
其实对于静态方法,是不需要对象的,直接用类名调用即可。