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)

时序图:描述动态行为的

类图:描述静态结构,有哪些类以及之间的关系

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

 

 

13.2 调用父类的构造方法

1. 构造方法的作用:

初始化成员变量

有继承情况,构造过程首先需要 调用父类构造方法初始化父类的成员变量,然后再初始化子类的成员变量

JAVA入门(13)--------继承与多态

2. super关键字

表示当前对象的父对象,

调用父类构造方法(super语句)应该在第一行,否则会编译错误

JAVA入门(13)--------继承与多态

 

3. 解决继承中的编译错误有三种办法

JAVA入门(13)--------继承与多态

1)在父类Person中添加默认构造方法,子类Student会隐式调用父类的默认构造方法

JAVA入门(13)--------继承与多态

2)在子类Sudent构造方法中添加super语句,显式调用父类构造方法,super语句必须是第一条语句。

3)在子类Sudent构造方法中添加this语句,显式调用当前对象其他构造方法,this语句必须是第一条语句。

JAVA入门(13)--------继承与多态

 

 

13.3 变量隐藏和方法覆盖

1. 成员变量隐藏

子类继承父类时,子类有一个与父类一样的成员变量,此时子类的成员变量会屏蔽父类的成员变量

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

 

super关键字的用法:

1)用来调用父类的构造方法;

2)用来调用父类的成员变量;

JAVA入门(13)--------继承与多态

3)用来调用父类的成员方法

 

2. 方法的覆盖 (Override)

子类继承父类的情况下,子类有一个与父类一样的成员方法。子类就会把父类的方法覆盖(或重写)

相同的方法:方法名相同; 方法的参数列表相同; 返回值相同

重载(Overload):方法名相同; 方法的参数列表不同

JAVA入门(13)--------继承与多态

 

JAVA入门(13)--------继承与多态

 

@Override 注解的作用

1. 增加可读性

2.帮助编译器发现错误

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

 

 

方法覆盖时应遵循的原则:

1. 覆盖后的方法不能比原方法的访问控制更严格(可以相同)

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

2.覆盖后的方法不能比原方法产生更多的异常

 

 

 

 

13.4 多态

1. 多态的概念

JAVA入门(13)--------继承与多态

 

多态的前提条件:

1、继承:多态发生在父类和子类之间

2、覆盖:子类覆盖了父类的方法

3、声明变量:声明的变量类型是父类的类型,但是实例是子类的实例

 

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

 

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

 

2. 引用类型检查

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

 

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

obj  instanceof  type(引用数据类型)   :返回 bool

 

 

3. 引用类型转换

int i = 10;

byte b = (byte) i;

引用类型转换的前提是 这些类型都是在一个  继承树下,有继承关系 或者是接口关系

JAVA入门(13)--------继承与多态

 

JAVA入门(13)--------继承与多态

 

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

 

 

13.5 再谈final关键字

 

13.5.1 final修饰变量

1、final 修饰的局部变量 必须使用之前 被赋值 一次(有且只能有一次) 才能使用

JAVA入门(13)--------继承与多态

2、final修饰的成员变量在声明时没有赋值的叫“空白final变量”,空白final变量必须在构造方法或静态代码块中初始化

静态常量的初始化必须在静态代码块里

成员变量也只能初始化 一次

 

JAVA入门(13)--------继承与多态

JAVA入门(13)--------继承与多态

 

13.5.2 final修饰类

final修饰的类不能被子类继承

JAVA入门(13)--------继承与多态

 

13.5.3 final修饰方法

final修饰的方法 不能被子类覆盖

JAVA入门(13)--------继承与多态