什么是继承,Java继承的用法(附带实例)

什么是继承,Java继承的用法(附带实例)

在 Java 程序中,继承描述了类的所属关系,多个类通过继承可形成一个关系体系,进而在原有类的基础上派生出新的类,扩展新的功能,从而实现代码的复用。

采用继承机制来设计软件系统中的类,可以提高程序的抽象程度,减少程序维护工作量,提高开发效率。

Java继承的概念

在现实生活中,“继承”是指按照法律或遵照遗嘱接受死者的财产、职务、头衔、地位等;在 Java 程序中,继承指的是指一个对象直接使用另一对象的属性和方法。

图 1 Car类、Bus类和Truck类的关系图

如上图所示,卡车(Truck类)和公交车(Bus类)都属于汽车(Car类),它们都有发动机(engine)和轮子(wheel),都可以行驶(run)和刹车(stop),但是卡车类新增了载重量(capacity)属性以及拉货(load)和卸货(unload)方法,公交车类新增了载客量(capacity)属性以及报站(busstop)和停靠(dock)方法。

在面向对象程序设计中,一个新类从已经存在的类中获得成员变量或成员方法,这种现象称为继承。提供继承信息的类被称为父类(超类、基类),得到继承信息的类被称为子类(派生类)。

一个父类可以同时拥有多个子类,但 Java 语言不支持多重继承,所以一个类只能有一个父类。父类是所有子类的公共成员变量和成员方法的集合,而子类是父类的特例,子类继承父类的成员变量和成员方法,可以修改父类的成员变量或重写父类的成员方法,也可以增加新的成员变量或成员方法。

采用继承机制来设计系统中的类,可以提高程序的抽象程度,更加接近于人类的思维方式。

继承机制的显著特点之一是可以实现代码复用。例如,下面有一个 Dog 类和 Cat 类:

class Dog {

private String name; // 声明名字属性

private int age; // 声明年龄属性

public void show() { // 定义显示信息的方法

System.out.println("狗" + name + "在啃骨头");

}

}

class Cat {

private String name; // 声明名字属性

private int age; // 声明年龄属性

public void show() { // 定义显示信息的方法

System.out.println("猫" + name + "在吃咸鱼");

}

}

仔细观察这段代码我们会发现,在 Dog 类和 Cat 类中有很多重复代码,假设我们后续增加 Pig 类、Monkey 类等,重复代码还会不断增加。这时候,我们就可以提取这些类的相同成员变量和成员方法,设计一个 Anima(动物类),使 Dog 类、Cat 类等继承 Animal 类。

Java继承的使用

在 Java 语言中,类的继承通过 extends 关键字来实现,在定义类时通过 extends 关键字指出新定义类的父类,表示在两个类之间建立了继承关系。新定义的类称为子类,它可以从父类那里继承所有非 private(私有)的成员。

Java 继承的语法格式如下:

class 子类A extends 父类B {

// 代码块

}

该语法表示子类 A 派生于父类 B,如果类 B 又是某个类的子类,则类 A 同时也是该类的间接子类。

如果没有 extends 关键字,则该类默认为 java.lang.Object 类的子类。Java 语言中的所有类都是直接或间接地继承 java.lang.Object 类得到的,所以之前所有案例中的类均是 java.lang.Object 类的子类。

接下来,通过案例来演示如何通过继承 Animal 类来派生 Dog 类、Cat 类,从而形成类的继承体系,实现代码复用。

class Animal { // 定义父类Animal类

public String name;

public int age;

public void show() {

System.out.println("名字是" + name + ", 年龄: " + age);

}

}

class Dog extends Animal { // 定义子类Dog类

String color;

public void eat() {

System.out.println(color + "的狗狗在啃骨头");

}

}

class Cat extends Animal { // 定义子类Cat类

}

public class Demo {

public static void main(String[] args) {

Dog d = new Dog();

d.name = "旺财";

d.age = 3;

d.color = "黑色";

d.show();

d.eat();

}

}

程序的运行结果如下:

名字是旺财,年龄:3

黑色的狗狗在啃骨头

程序中,Dog 类通过 extends 关键字继承了 Animal 类,它就是 Animal 的子类,Cat 类同样如此。

从程序运行结果中可发现,Dog 类虽然没有定义 name、age 成员变量和 show() 成员方法,但却能访问这些成员,说明子类可以继承父类所有的成员。

相关推荐

美食大冒险之英雄烩
365bet官网在线

美食大冒险之英雄烩

07-01 👁️ 1208
20 多种形状的英文名称(附图片)🔺🟩🔶🔻
365日博体育备用

20 多种形状的英文名称(附图片)🔺🟩🔶🔻

07-11 👁️ 185
小米手机如何连接小米电视
365日博体育备用

小米手机如何连接小米电视

07-07 👁️ 1166