继承是什么,Java继承详解
在 Java 中,继承是面向对象编程中重要的组成部分,几乎是所有面向对象语言中不可缺少的部分。
在面向对象的软件开发过程中,继承能够有效地实现代码的复用,大大缩短程序开发的周期,提高软件的可扩展性和可维护性。
熟练掌握继承,是学习面向对象的重要环节。
图 1 类的继承
通过继承的方式,子类不仅可以自动拥有父类的属性和方法,还能扩展新的属性和方法,达到代码重用,以及提高软件结构层次的目的。
如下图所示,结合动物分类图,读者可以进一步理解继承的概念和意义。
图 2 动物分类图
驯鹿和麋鹿都属于鹿科动物,水牛和黄牛属于牛科动物,而鹿科动物和牛科动物都属于动物。无论是哪类动物,都具有动物的共同属性,因此,这些动物之间会形成一种继承体系。
从分类学上来看,采用这种分类及分层的树状继承结构可以有效地进行管理和研究。
例如,人可以从事多种职业,如司机、图书馆管理员和地铁售票员等,但无论是司机、图书馆管理员,还是地铁售票员,都应该符合人的共性。因此,可以先构建一个人具有的共性类,再分别构建司机、图书馆管理员和地铁售票员的类,让这 3 个类都继承人的共性类,这样每个类就无须重复定义人的共性的代码。实际上,Java 中继承的本质也是通过模拟这种现实生活中继承的概念来实现的。
下面通过实例来介绍子类是如何继承父类的:
在 Java 中,一个类只能有一个父类,这种特点称为单重继承。
例如,这里定义一个父类 Dog,一个继承 Dog 类的沙皮狗类 Sharpei,并在 Sharpei 类中定义一个自己的方法 cute(),代码如下列实例所示:
在面向对象的软件开发过程中,继承能够有效地实现代码的复用,大大缩短程序开发的周期,提高软件的可扩展性和可维护性。
熟练掌握继承,是学习面向对象的重要环节。
子类与父类
在 Java 程序设计中,类的继承是基于已存在的一个类构建一个新的类的机制。新类吸收已有类的属性和方法,并且能在此基础上扩展新的属性和方法。将现有的类称为父类或超类,构建的新类称为子类,如下图所示。图 1 类的继承
通过继承的方式,子类不仅可以自动拥有父类的属性和方法,还能扩展新的属性和方法,达到代码重用,以及提高软件结构层次的目的。
如下图所示,结合动物分类图,读者可以进一步理解继承的概念和意义。
图 2 动物分类图
驯鹿和麋鹿都属于鹿科动物,水牛和黄牛属于牛科动物,而鹿科动物和牛科动物都属于动物。无论是哪类动物,都具有动物的共同属性,因此,这些动物之间会形成一种继承体系。
从分类学上来看,采用这种分类及分层的树状继承结构可以有效地进行管理和研究。
例如,人可以从事多种职业,如司机、图书馆管理员和地铁售票员等,但无论是司机、图书馆管理员,还是地铁售票员,都应该符合人的共性。因此,可以先构建一个人具有的共性类,再分别构建司机、图书馆管理员和地铁售票员的类,让这 3 个类都继承人的共性类,这样每个类就无须重复定义人的共性的代码。实际上,Java 中继承的本质也是通过模拟这种现实生活中继承的概念来实现的。
子类的继承性
在 Java 程序中,通过关键字 extends 来声明一个类是从另一个类继承而来的,一般语法格式如下:class 子类 extends 父类{ ... // 程序代码,子类的属性和方法 }
下面通过实例来介绍子类是如何继承父类的:
class Person { String name; int age; String gender; // Person类的其他实现... } class Student extends Person { int height; Student(String name, int height) { this.name = name; this.height = height; // 假设年龄是20,性别是"男" this.age = 20; this.gender = "男"; } // Student类的其他实现... } class Driver extends Person { double salary; Driver(String name, double salary) { this.name = name; this.salary = salary; // 假设年龄是30,性别是"男" this.age = 30; this.gender = "男"; } // Driver类的其他实现... } public class Test { public static void main(String[] args) { Student s = new Student("高同学", 168); Driver t = new Driver("李师傅", 6000); System.out.println(s.name + "身高为:" + s.height); System.out.println(t.name + "工资为:" + t.salary); } }运行结果为:
高同学身高为:168
李师傅工资为:6000.0
在 Java 中,一个类只能有一个父类,这种特点称为单重继承。
子类与对象
子类除了可以继承父类的属性和方法,还可以定义自己的属性和方法。例如,这里定义一个父类 Dog,一个继承 Dog 类的沙皮狗类 Sharpei,并在 Sharpei 类中定义一个自己的方法 cute(),代码如下列实例所示:
class Dog { // 定义name属性 public String name; // 定义一个公共的叫的方式 public void shout() { System.out.println("动物发出的叫声!"); } } class Sharpei extends Dog { // 在子类中扩充一个cute()方法 public void cute() { System.out.println("我会摇尾巴!"); } } public class Test { // 在main()方法中验证子类对象对父类的属性和方法的调用 public static void main(String[] args) { // 实例化子类对象 Sharpei s = new Sharpei(); s.name = "wangcai"; s.shout(); // 调用继承自父类的方法 s.cute(); // 调用子类特有的方法 } }运行结果为:
动物发出的叫声!
我会摇尾巴!