JAVA入门(13)--------继承与多态
13.1 Java中的继承
1. 继承的概念
Person类:name,age birthDate
Student类:school + name,age,birthDate (需要extends Person)
java.lang.Object是所有类的根类,所有的类都直接或间接继承了Object;
Object类中定义了常用的方法,equals(), toString(),
Java是单继承,extends后面只能有一个父类,多继承是通过接口
2. UML图
UML是统一建模语言,能够表示面向对象的分析与设计(OOAD)
时序图:描述动态行为的
类图:描述静态结构,有哪些类以及之间的关系
13.2 调用父类的构造方法
1. 构造方法的作用:
初始化成员变量
有继承情况,构造过程首先需要 调用父类构造方法初始化父类的成员变量,然后再初始化子类的成员变量
2. super关键字
表示当前对象的父对象,
调用父类构造方法(super语句)应该在第一行,否则会编译错误
3. 解决继承中的编译错误有三种办法
1)在父类Person中添加默认构造方法,子类Student会隐式调用父类的默认构造方法
2)在子类Sudent构造方法中添加super语句,显式调用父类构造方法,super语句必须是第一条语句。
3)在子类Sudent构造方法中添加this语句,显式调用当前对象其他构造方法,this语句必须是第一条语句。
13.3 变量隐藏和方法覆盖
1. 成员变量隐藏
子类继承父类时,子类有一个与父类一样的成员变量,此时子类的成员变量会屏蔽父类的成员变量
super关键字的用法:
1)用来调用父类的构造方法;
2)用来调用父类的成员变量;
3)用来调用父类的成员方法
2. 方法的覆盖 (Override)
子类继承父类的情况下,子类有一个与父类一样的成员方法。子类就会把父类的方法覆盖(或重写)
相同的方法:方法名相同; 方法的参数列表相同; 返回值相同
重载(Overload):方法名相同; 方法的参数列表不同
@Override 注解的作用
1. 增加可读性
2.帮助编译器发现错误
方法覆盖时应遵循的原则:
1. 覆盖后的方法不能比原方法的访问控制更严格(可以相同)
2.覆盖后的方法不能比原方法产生更多的异常
13.4 多态
1. 多态的概念
多态的前提条件:
1、继承:多态发生在父类和子类之间
2、覆盖:子类覆盖了父类的方法
3、声明变量:声明的变量类型是父类的类型,但是实例是子类的实例
2. 引用类型检查
obj instanceof type(引用数据类型) :返回 bool
3. 引用类型转换
int i = 10;
byte b = (byte) i;
引用类型转换的前提是 这些类型都是在一个 继承树下,有继承关系 或者是接口关系
13.5 再谈final关键字
13.5.1 final修饰变量
1、final 修饰的局部变量 必须使用之前 被赋值 一次(有且只能有一次) 才能使用
2、final修饰的成员变量在声明时没有赋值的叫“空白final变量”,空白final变量必须在构造方法或静态代码块中初始化
静态常量的初始化必须在静态代码块里
成员变量也只能初始化 一次
13.5.2 final修饰类
final修饰的类不能被子类继承
13.5.3 final修饰方法
final修饰的方法 不能被子类覆盖