什么是继承,Java继承的具体实现(附带实例)

继承是面向对象编程中最重要的概念之一,从字面上来理解就是从前者那里得到前者所拥有的能力,也就是说某个类能通过继承来得到另一个类的属性和方法。

图 1 人的继承

举一个例子,如上图所示,人具有年龄属性和行走能力,女人和男人都继承了人,那么他们也都具有年龄属性和行走能力。此时,女人可以添加生孩子的能力,而男人则可以添加干重体力活的能力。继续往下继承,女厨师、女学生和女教师可以继续继承女人,从而拥有女人的属性和能力。而男厨师、男学生和男教师则可以继承男人,从而拥有男人的属性和能力。

面向对象编程是根据客观世界规律所提出的一种编程思想,某些对象之间具有某种关系,而继承的性质刚好符合这种关系,所以需要用继承机制来描述。

总的来说,继承能给我们带来下面两个好处:

继承能很好地描述某些对象之间的关系,有助于编程人员进行程序设计;

继承能提高代码的复用性,某个类只需继承另一个类便可得到该类的属性和能力,这样就可以避免编写相同的代码,从而提升代码的复用性。

Java继承的具体实现

下面我们来看看 Java 如何实现类的继承。整体语法如下:

访问修饰符 class 类名 extends 父类名{

......

}

前半部分是我们熟悉的常规类定义语法,重点是后半部分,可以看到是通过 extends 关键字来指定父类的。

为了让大家能更好地理解什么是继承,下面通过实例来进行说明:

public class Person {

String name;

int age;

Person(String name, int age) {

this.name = name;

this.age = age;

}

void eat() {

System.out.println("吃东西");

}

}

我们定义了 Person 类,该类包含了 name 和 age 两个属性,同时具有吃东西的能力。

接着我们定义一个 Woman 类,由于它具有 Person 类的属性和能力,所以可以通过继承的方式来描述该类:

public class Woman extends Person {

boolean isDelivered;

Woman(String name, int age, boolean isDelivered) {

super(name, age);

this.isDelivered = isDelivered;

}

public void deliver() {

System.out.println("生小孩");

this.isDelivered = true;

}

}

此时的 Woman 类便具有了 name 和 age 两个属性以及 eat() 方法,这样我们就可以避免编写重复的代码了。假如 Woman 类还要增加是否生过小孩的属性和生小孩的方法,那么可以直接在 Woman 类中添加 isDelivered 属性和 deliver() 方法。

定义好 Woman 类后我们来测试一下效果:

public class Woman extends Person {

......

public static void main(String[] args) {

Woman w = new Woman("小莉", 25, false);

w.eat();

w.deliver();

System.out.println(w.name + " " + w.age + " " + w.isDelivered);

}

}

运行结果为:

吃东西

生小孩

小莉 25 true

程序中创建一个 Woman 对象“小莉”,然后分别调用它的 eat() 方法和 deliver() 方法,并且将它的属性都打印出来。从中我们可以清晰地看到继承的效果,Woman 类具有了 Person 类的所有属性和方法,并且还能根据自己的需要添加属性和方法。

Java 语言只支持单继承的方式,它不像 C++ 语言可以进行多继承。所谓的单继承是指某个子类只可以继承一个父类,而多继承则指某个子类可以继承多个父类。如下图所示,类 B 继承类 A 是可以的,但是类 C 同时继承类 A 和类 B 则是不允许的。

图 2 只支持单继承

Java父子类的转换

当两个类互为父类和子类时,将子类对象转换为父类对象的过程称为向上转换。向上转换在 Java 中是允许的,因为子类肯定具有父类的所有属性和方法,所以能够安全地将子类对象转换为父类对象。

仍然以 Person 类和 Woman 类为例,将 Woman 对象转换为 Person 对象是允许的,它可以调用 Person 类拥有的 eat() 方法,但是它无法调用 Woman 类拥有的 deliver() 方法,代码如下:

public class InheritanceTest2 {

public static void main(String[] args) {

Person p = new Woman("小莉", 25, false);

p.eat();

}

}

与向上转换相反的是向下转换,向下转换是将父类对象转换为子类对象,这种情况是不允许的,因为子类具有比父类更多的属性和方法,所以不能安全地进行转换。下面的代码运行时将报转换异常“java.lang.ClassCastException”。

public class InheritanceTest3 {

public static void main(String[] args) {

Woman w = (Woman) new Person("小莉", 25);

w.eat();

}

}

重复铺货是什么?怎么处罚?作者:小果 时间:2025-10-01 阅读:5956 【科普一下】你知道吗,“清明”竟然还是一种花?
top