与其明天开始,不如现在行动!
文章目录
- 多态
- 多态成立的条件
- 细节
- 继承
- 💎总结
多态
多态成立的条件
- 存在继承关系或者实现关系
- 子类重写父类的方法
- 父类引用指向子类对象
细节
通过父类的引用调用子类的对象
Animal animal = new Dog();
-
animal是向上转型的(隐式转换)
-
通过animal调用父类和子类都有的成员变量时,调用的是父类的成员变量
-
不能调用子类独有的成员变量,编译时期就会报错
-
通过animal调用父类和子类都有的成员方法时,调用的是子类的成员变量
-
子类没有重写父类的方法,就会调用父类的方法
-
子类引用指向父类对象时向下转型,此时必须强制转换为子类
School s = new Classes(); Classes c = (Classes) s;//不能是以下这种转换,运行会报错 Classes c = (Classes) new School(); //❌
继承
- 在子类可以增加域、增加方法或者覆盖超类方法,但是绝对不能删除继承的任何域和方法
- 父类没有无参构造并且子类构造没有显式调用父类其它构造,编译器会报错
- Java不支持多继承
- 一个类声明了final,其它的类就不能继承这个类,其中的方法也会被声明为final,但是变量不会。
- 只能在继承层次内进行类型转换
- 在将超类转换子类之前,应该使用
instanceof
进行检查
抽象
-
类即使不含有抽象方法,也可以设置为抽象类
-
抽象类不能实例化,但是可以引用一个非抽象的子类对象的实例
// Person抽象,Student继承Person类而且不抽象 Person p = new Student();
修饰符
- public—对所有类可见
- protected—对本包和所有子类可见
- 默认(不需要修饰符)—对本包可见
- private—仅本类可见
对象包装
- Integer
- 对象包装类是不可变的,一旦构造了对象包装类,就不允许更改包装在其中的值
- 对象包装器是final的,因此不能定义他们的子类
- 如果在一个条件表达式中同时使用Integer和Double,Integer就会自动拆箱提升为Double,再装箱为Double
- 装箱和拆箱是编译器执行的,而不是虚拟机
💎总结
本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!