1.多态
1.1编译时多态:在编译时就能够确定调用哪个方法
方法重载是编译时多态,在编译期根据参数的数据类型,个数以及次序来确定调用方法
1.2运行时多态:只有在运行时才能确定调用哪个方法,主要指动态绑定来实现,动态绑定是程序运行时确定调用 哪个方法的过程,他依赖于对象的实际类型而不是引用类型
方法覆写:当父类对象引用子类实例方法时(父类声明,子类实例化)为运行时多态
即父类引用指向子类对象
通过父类创建的引用类型变量,保存了子类对象的内存地址
父类 变量=new 子类();
1.3应用场景
如果一个功能只对应一种实现,就不使用多态
如果一个功能可能有多种实现,一定是多态
1.4优点
低耦合,降低需求变动带来的代码变动风险
1.5缺点
多态缺点:丢失子类特有的属性(父类没有子类有的属性)
1.6多态进行属性调用场景
父子类都没有:报错
父类有子类没有:父类
父类子类都有:成员方法执行子类的,其他执行父类的\
父类没有子类有:报错,丢失子类原有的属性
1.7Instanceof
多态又叫向上转型 Animal a= new Cat();
强制转换回子类类型,又叫向下转型 Cat c=(Cat) a;
必须先发生向上转型,才能发生向下转型
a Inatanceof b:用于判断a是否由b实例化而来,可以有效降低向下转型的风险
2.抽象
2.1概念
抽象:往往用来表示设计中得出的抽象概念,一般不会有具体的实体表示(动物类)
比如动物,他只是一个抽象的概念,并没有一个具体的东西叫动物
所以动物就不能代表一个具体的实体,就意味着动物类是不能创建对象的(没有意义)
所以动物类应该定义为抽象类
abstract:修饰符,表示抽象的
abstract修饰类为抽象类,并且抽象类不能创建对象,但是依然有构造方法,用于用于子类创建对象时调用 (super())
abstract修饰的方法为抽象方法,抽象方法没有方法体,用于被子类实现
抽象方法必须在抽象类中,而抽象类中不一定有抽象方法
2.2注意事项
final 和 abstract不能同时修饰
因为:final表示最终,不可修改,修饰的类不能被继承,修饰的成员方法不能被覆写
abstract表示抽象的,抽象的类和方法,就是用于被继承,被子类实现覆写的
3.接口
3.1是什么
面向接口编程
接口是解决java中单继承导致功能变弱的问题,类和接口可以多实现,类与类只能单继承
一个类只能继承一个类,但是可以实现很多接口
使用接口,也是可以发生多态的
接口可以看做特殊的抽象类,完全抽象,接口里的所有方法都是抽象方法
接口中没有变量,只有常量public static final,并且psf可以省略
1.8之前,接口中没有其他方法,只有抽象方法和常量
1.8开始新特性,接口中可以出现default方法和静态方法
由定义类关键字class改为interface
3.2优点
跟多态的优点相同,降低耦合度
3.3怎么用
类和类是单继承 extends
类和接口之间多实现 implements,用多个逗号隔开
接口和接口之间多继承,多个逗号隔开
继承和实现,可以同时存在,先继承,后实现
一个类实现接口后,需要实现所有的抽象方法
一个抽象类实现接口后,可以实现0到n个抽象方法
接口不能创建对象,并且没有构造方法
通过接口名.静态方法()调用静态方法
3.4接口和抽象类的区别
如果某个功能通过抽象类和接口都能完成,优先使用接口
因为类和类是单继承,而类和接口是多实现
我们使用接口的话,会保留类继承,扩展性更强
4.Object
Object是java提供的根类,所有类都直接或间接继承Object
Object中的方法是所有类都有的
Object b = new xxx() 可以发生多态
4.1toString
4.2Equals
4.3Finalize
Na1I-1722517277528)]
[外链图片转存中…(img-x5wT014m-1722517277528)]
[外链图片转存中…(img-yRkfh0cD-1722517277528)]
4.3Finalize
[外链图片转存中…(img-1Lh9X3RJ-1722517277529)]
标签:子类,Object,多态,接口,Equals,抽象,父类,方法 From: https://blog.csdn.net/yanmoumou_/article/details/140857355