继承
public class 子类 extends 父类{
}
把多个类共同的属性和行为定义在一个父类中 让这些类分别去继承该类 就可以共享父类中的属性和方法
子类可以访问父类中非私有的成员
继承的特点:
1 java中只支持单继承 不支持多继承 但是可以多层继承
2 java中任何一个类都间接或者直接的继承自Object类 Object类是所有类的根类
super
super不是引用类型 不包含某个对象的内存地址 他只是子类用来访问父类数据的一种方式
如何访问父类的方法? super.方法名();
如何访问父类的成员变量? super.变量名;
在继承中 访问成员的特点?
访问成员变量->this.变量名
访问父类变量->super.变量名 同名的变量 从局部范围 -> 成员范围 -> 父类成员范围
访问局部变量 ->直接使用变量名
同名方法 从成员范围 -> 父类范围
访问成员方法 -> 方法名()/this.方法名();
访问父类方法 -> super.方法名();
this和super在构造方法中的用法
在子类构造方法的第一行 默认都会有super() 作用是对父类中的数据进行初始化操作 但是并没有父类型对象产生
另外 如果想通过子类的构造方法给父类中的属性赋值 super(参数1,参数2...)
this()表示在当前的构造方法中调用本类的其他带参构造
this()和super()不能同时出现在第一行 面试题可能出
方法的重写
1:在具有继承关系的两个子父类之间
2:父类中的方法无法满足子类的业务需求
3:方法的声明必须和父类的方法声明保持一致
4:只能修改方法体
5:@Override 表名重写的是来自父类的方法
多态
1:有继承关系
2:存在方法的重写
3:有 父类型引用 指向 子类型对象
同一个对象 在不同时期表现出不同状态
父类型引用指向子类型对象
父类名 对象名 = new 子类名(); //向上转型 upcasting
访问成员的特点:
访问成员变量:编译看左 运行看左
访问成员方法:编译看左 运行看右
毛病:无法访问子类独有的方法
向下转型 downcasting
语法:目标类型 对象名 = (目标类型)要被强转的对象名;
有可能会引发异常:ClassCastException 如何避免?
在做强转之前 先做判断 两者之间是否存在继承关系
a instanceof b
多态的用法:
最常用的场景是:定义方法时 方法的参数列表是 父类型 但是调用方法时接收的参数是 子类型的对象
提高了程序的扩展性和可维护性