多态,构造方法
多态,构造方法
具有多个不同形态的表现形式,父类引用指向子类对象,父new子
父类类型 变量名=new 子类对象();
接口 接口名=new 实现类对象();
使用多态访问成员变量
直接访问成员变量
看等于号左边是谁,优先使用,没有则向上找
间接通过方法访问成员变量
看方法属于谁,优先使用,没有则向上找,如果子类重写方法,就是子,没有重写就是父
使用多态访问成员方法:看new的是谁,就优先使用谁,没有则向上找
成员变量:编译看左边,运行看左边
成员方法:编译看左边,运行看右边
多态的好处
- 无论右边new的哪个子类,等于号左边在调用的时候方法不需要变化
- 使代码更加的简单简洁,并具有良好的扩展性
多态的转型
向上转型
父类 对象名 = new 子类名称();
右侧创建一个子类对象,把它当做一个父类使用,小范围转大范围
Animal a = new Dog();
double d = 100;
向上转型绝对安全
向下转型
还原的操作 子类名称 对象名 = (子类名称) 父类对象;
将父类对象,还原成子类对象
ClassCastException:类型转换异常
instanceof 关键字判断类型
权限修饰符
final:代表最终,不可改变
修饰成员变量:值不能改变,必须赋初始值
修饰局部变量:值不能改变
修饰类:不能有子类
修饰方法:不能被重写
(修饰对象):内存地址锁定
public(公开的) | protected(受保护的) | default(默认,不能写) | private(私有的) | |
---|---|---|---|---|
同一类中 | Yes | Yes | Yes | Yes |
同一包中(子类和无关类) | Yes | Yes | Yes | |
不同包的子类 | Yes | Yes | ||
不同包的无关类 | Yes |
成员变量使用private
方法受用public,便于调用
构造方法使用public,方便创建对象
构造方法
- 在创建对象的时候会自动调用构造方法,如果没有自定义构造方法,那么JVM会自动创建一个空参构造
- 当自定义了构造方法以后,JVM将不会自动创建空参构造方法
- 构造方法没有返回值,也不需要写返回值,因为这个方法就是来创建对象的,创建完对象,方法就会结束
- 构造方法名字必须和类名完全一致
- 构造方法是可以重载出现的
- 构造方法能被修饰为private,作用就是为了阻止该类创建对象
构造方法和普通方法的区别
- 构造方法在创建对象的时候会自动调用,并且只执行一次
- 普通方法需要手动调用,可以使用多次
构造方法之间是可以进行调用的,但是不能直接写方法名,写this();
子类调用父类构造方法
默认直接调用,隐式代码super();
但是this()和super()同时存在会报错,因为this()和super()必须都在代码的第一行;