Java学习总结第十四天Java类的继承

来源:互联网 发布:炫光制作软件 编辑:程序博客网 时间:2024/05/21 10:11

类的继承

Java的继承具有单继承的特点,每个子类只有一个直接父类。

Java的继承是通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类。父类和子类的关系是一种一般和特殊的关系。例如水果和苹果的关系,苹果继承了水果,苹果是水果的子类,则苹果是一种特殊的水果。

定义继承的形式为:

[访问权限]   class 类名  [extends    父类]

{

    类体

}

Java中的继承是通过extends关键字来实现的,在定义类时使用extends关键字指明新定义类的父类,就在两个类之间建立了继承关系。

新定义的类称为子类,它可以从父类那里继承所有非private的属性和方法作为自己的成员。

下面是Fruit类的代码:

 

接下来再定义该Fruit类的子类Apple,程序如下:

 

子类扩展了父类,将可以获得父类的全部属性和方法,但不能获得父类构造器

Java里的继承都是单继承,也就是只能有一个直接的父类,可以有n个间接父类。

 

重写父类的方法:

子类扩展了父类,子类是一个特殊的父类。大部分时候,子类总是以父类为基础,额外增加新的成员变量,和方法。担忧一种情况例外:子类需要重写父类的方法。例如鸟类都包含了飞翔方法,其中鸵鸟是一种特殊的鸟类,因此鸵鸟应该是鸟的子类,因此它也将从鸟类获得飞翔方法,但这个飞翔方法明显不适合鸵鸟,为此,鸵鸟需要重写鸟类的方法。

下面程序先定义了一个Bird类:

 

下面再定义一个Ostrich类,这个类扩展了Bird类,重写了Brid类的fly()方法:

 

这种子类包含于父类同名方法的现象被称为重写,也被称为方法覆盖。

方法的重写要遵循“两同两小一大” 指的是:方法名相同,形参列表相同。返回值类型更小或相同,抛出的异常更小或相同,访问控制权限要更大。

 

super限定

super是Java提供的一个关键字,super用于限定该对象调用它从父类继承得到的实例变量或方法。正如this不能出现在static修饰的方法中一样,super也不能出现在static修饰的方法中。

 

如果在某个方法中访问名为a的成员变量,但没有显式指定调用者,则系统查找a的顺序为:

(1)查找该方法中是否有名为啊的局部变量。

(2)查找当前类中是否包含名为a的成员变量。

(3)查找a的直接父类中是否包含名为a的成员变量,一次上溯a的所有父类,知道java.lang.Object类,如果最终不能找到名为a的成员变量,则系统出现编译错误。

调用父类构造器

子类构造器总会调用父类构造器。

如果子类构造器没有显式使用super调用父类构造器;子类构造器默认会调用父类无参数的构造器。

创建一个子类实例时,总会先调用最顶层父类的构造器。

 

 

从上面程序中不难看出,使用super调用和使用this调用也很像,区别在于super调用的是父类的构造器,而this调用的是同一个类中重载的构造器。因此,使用super调用父类构造器也必须出现在子类构造器执行体的第一行。

子类构造器调用父类构造器分如下几种情况:

Ø 子类构造器执行体的第一行使用super显式调用父类构造器,系统将根据super调用里传入的实参列表调用父类对应的构造器。

Ø 子类构造器执行体的第一行代码使用this显式调用本类中重载的构造器,系统将根据this调用里传入的实参列表调用本类中的另一个构造器。执行本类中另一个构造器时即会调用父类构造器。

Ø 子类构造器执行体中既没有super调用,也没有this调用,系统将会在执行子类构造器之前,隐式调用父类无参数构造器。

 

 

0 0
原创粉丝点击