Java学习——继承

继承是面向对象编程的重要特征之一。

继承是指声明一些类,可以再进一步声明这些类的子类,而子类具有父类已经拥有的一 些方法和属性,这跟现实中父子关系 很类似,子类也称为派生类、继承类、导出类,父类称为超类、父类、基类。

派生类(子类)继承原来的方法和实例变量,并且能添加自己的方法和实例变量。

一个类的直接父类只能有一个,不支持多继承

继承的关键字:extends

Java学习——继承

Java学习——继承

子类对象的创建过程:从最顶层的基类开始往下一层层的调用默认构造函数:

Java学习——继承

当创建一个C类的对象的时候,自动调用了父类的无参构造函数

想调用父类的有参构造函数,需要使用super关键字,调用父类有参的构造函数的语句要放在子类有参或者无参构造函数第一个语句中

Java学习——继承

Java学习——继承


Java学习——继承

方法的覆写:

方法覆写(overload)与方法的重载非常相似,在父类中已经实现的方法可能不够精确,不能满足子类的需求,在子类中重写父类中的方法。

Java学习——继承

Java学习——继承

方法覆写后又需要调用覆写前的方法,可以使用super关键字。

super关键字的用法:

1、在子类构造函数中调用父类有参构造函数;

2、在子类中调用父类已经被覆写的方法;

Java学习——继承

Java学习——继承

多态与动态绑定:

Java学习——继承

多态与动态绑定:



Java学习——继承

想要数组元素调用没有在Animal2类中定义的方法,但是在Tiger2和Fish2中定义过的方法时,需要类型转换:

Java学习——继承

final关键字:

不能被子类继承的类被定义为final类,也叫最终类。

final类:

final class 类名  extends 父类{

//类体

也可以把方法定义为final方法:

final方法:

public final void run(){

//方法体

}

实例变量也可以被定义为final,被定义为final的变量不能被修改。被声明为final的类中的方法会自动地被声明为final方法,但类的 实例变量并不是final.

抽象类:是指在类中定义方法,但是并不去实现它,而在它的子类中支具体的 实现。定义的抽象方法不过是一个方法占位符,继承的抽象类的子类必须实现父类的抽象方法,除非子类也被定义成一个抽象方法。

抽象类关键字:abstract

在抽象类中的方法不一定是抽象方法,但是含有抽象方法的类必须被定义成抽象类

抽象类的定义:

修饰符(public等 ) abstract class 类名{

抽象方法的定义:

修饰符(public等) abstract  返回值类型   方法名(){

Java学习——继承

尽管Animal2存放的是Tiger和Fish对象,但是不能直接调用子类方法:animal11.tigerRun()或者 animal22.swim()都是错的,调用 这些子类的方法需要类型转换:

((Fish)animal22).swim();

((Tiger)animal11).tigerRun();

Object类:

它是所有类的祖先类。在Java中如果定义了一个类并没有继承任何类,那么它默认继承Object类。而如果它继承了一个类,则它的父类,甚至父类的父类必然是继承自Object类,所以说任何类都是Object类的子类。

Java学习——继承


equals方法和 toString方法:

没看懂先放放

关于super:


Java学习——继承

Java学习——继承

父类有参构造函数的调用:

Java学习——继承

Java学习——继承