Java继承超详细

前言继承是面向对象语法的三大特征之一 。继承可以降低代码编写的冗余度,提高编程的效率 。通过继承,子类获得了父类的成员变量和方法 。一个子类如何继承父类的字段和方法,如何修改从父类继承过来的子类的方法呢 。今天我们开始学习有关JAVA继承的知识 。
继承继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为 。
继承的作用:通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量 。
 
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:
class 父类{
... //成员变量、成员方法
}
class 子类 extends 父类{
【Java继承超详细】... //类体
}
例如:

Java继承超详细

文章插图
 
运行结果为:
学生
Tom
19
注意:
子类不能选择性继承父类;
Java不支持多重继承,但一个类可以实现多个接口,从而克服单继承的缺点;
构造方法不会被子类继承,但可以从子类中调用父类的构造方法 。
继承的优点
  • 继承过来的字段和方法,可以像任何其他字段和方法一样被直接使用;
  • 在子类中可以声明一个与父类中同名的新字段或静态方法,从而“隐藏”父类中的字段或方法;
  • 可以在子类中声明一个在父类中没有的新字段和方法;
  • 可以在子类中编写一个父类当中具有相同名的新实例方法,这称为“方法重写”或“方法覆盖”;
  • 可以在子类中编写一个调用父类构造方法的子类构造方法,既可以隐式地实现,也可以通过使用关键字super来实现 。
重写和隐藏父类方法子类继承了父类中的所有成员及方法,但在某种情况下,子类中该方法所表示的行为与其父类中该方法所表示的行为不完全相同,例如,在父类语言中定义了说话这个方法,而在子类中说话的方法是不同的:外国人说英文,中国人说中文,这时我们就需要重写或隐藏父类的该方法 。
重写父类中的方法当一个子类中一个实例方法具有与其父类中的一个实例方法相同的签名(指名称、参数个数和类型)和返回值时,称子类中的方法“重写”了父类的方法 。例如:
Java继承超详细

文章插图
 
运行结果为:
大家好,欢迎学习Java!!!GoodBye,everyone注意:重写的方法具有与其所重写的方法相同的名称、参数数量、类型和返回值 。
隐藏父类中的方法如果一个子类定义了一个静态类方法,而这个类方法与其父类的一个类方法具有相同的签名(指名称、参数格式和类型)和返回值,则称在子类中的这个类方法“隐藏”了父类中的该类方法 。
  • 当调用被重写的方法时,调用的版本是子类的方法;
  • 当调用被隐藏的方法时,调用的版本取决于是从父类中调用还是从子类中调用 。

Java继承超详细

文章插图
 
运行结果为:
Java继承超详细

文章插图
 
可以看出,得到调用的隐藏方法是父类中的方法,而得到调用的重写方法是子类中的方法 。
方法重写和隐藏后的修饰符在子类中被重写的方法,其访问权限允许大于但不允许小于被其重写的方法,例如:父类中一个受保护的实例方法(protected)在子类中可以是公共的(public)的,但不可以是私有的(private) 。如果一个方法在父类中是static方法,那么在子类也必须是static方法;如果一个方法在父类中是实例方法,那么在子类中也必须是实例方法 。
子类访问父类私有成员子类继承其父类的所有public和protected成员,但不能继承其父类的private成员 。那么如何在子类中访问到父类中的字段呢,我们可以在父类中提供用来访问其私有字段的public或protected方法,子类使用这些方法来访问相应的字段 。例如:
Java继承超详细

文章插图
 
运行结果为:


推荐阅读