1、Java 继承 (子类 和 超类)
在Java中,可以将属性和方法从一个类继承到另一个类。 继承分为两类:
- 子类(子类)-从另一个类继承的类
- 超类(父级)-继承自的类
要从类继承,使用extends
关键字。
在下面的示例中,Student
类(子类)继承了People
类(超类)的属性和方法:
例如:
class People {
protected String name = "cjavapy"; // People 属性
public void study() { // People 方法
System.out.println("好好学习");
}
}
class Student extends People {
private String className = "Python"; // Student 属性
public static void main(String[] args) {
// 创建 student 对象
Student student = new Student();
// 调用student的study() 方法 (从 People 类继承) student
student.study();
// 显示name属性(从 People 类继承)的值和Student类的className的值
System.out.println(student.name + " " + student.className);
}
}
People
中的protected
修饰符,我们将People
中的name
属性设置为受protected
限制的访问修饰符。如果将其设置为private
,则Student
类将无法访问它。
继承对于代码可重用性很有用:重用创建新类时,请使用现有类的属性和方法。
2、final 关键字
如果不希望其他类继承自一个类,请使用final
关键字:
如果尝试访问final
类,则Java将生成错误:
final class People {
...
}
class Student extends People {
...
}
相关文档:Java 封装
3、继承的好处
Java 中继承(Inheritance)是面向对象编程的核心特性之一,具有多个重要的好处,能够帮助开发者提高代码的复用性、可维护性、扩展性等。
1)代码复用
继承使得子类能够复用父类已有的代码(属性和方法),避免了重复编写相同的代码。如果多个类有相似的功能或属性(如动物类中所有动物都有 name
和 speak()
方法),可以将这些通用的代码放到父类中,子类直接继承父类即可复用这些代码。
class Animal {
String name;
public void speak() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
public void fetch() {
System.out.println("Dog fetches the ball");
}
}
2)简化代码结构
继承有助于简化代码结构。通过继承,将公共的功能和属性提取到父类中,减少了代码的冗余。如果所有动物类都需要 name
属性和 speak()
方法,那么可以将它们放在 Animal
父类中,然后不同种类的动物类只需继承 Animal
类即可,避免重复定义相同的属性和方法。
class Bird extends Animal {
public void fly() {
System.out.println("Bird is flying");
}
}
3)提高可维护性
承有助于减少重复代码,使得修改和维护变得更加容易。修改父类中的逻辑时,子类会自动继承最新的更改,从而避免了多次修改相同代码。如果在父类中修复了某个通用的 bug,所有子类都可以自动获得修复后的代码,无需在每个子类中单独修改。
class Vehicle {
public void start() {
System.out.println("Vehicle started");
}
}
class Car extends Vehicle {
public void start() {
System.out.println("Car started with engine");
}
}
class Bike extends Vehicle {
public void start() {
System.out.println("Bike started with pedal");
}
}
4)扩展性
继承允许开发者在不修改已有代码的基础上,扩展和增强已有的功能。这种扩展性是实现系统功能增长而不破坏现有功能的关键。如果你有一个 Shape
类,并且后续需要添加不同形状(如圆形、矩形等)的类,可以通过继承 Shape
类来扩展新功能。
class Shape {
public void draw() {
System.out.println("Drawing shape");
}
}
class Circle extends Shape {
@Override
public void draw() {
System.out.println("Drawing circle");
}
}
5)多态支持
继承是实现多态的基础,允许父类引用指向子类对象。通过方法重写(Override),子类可以改变父类方法的实现,而不改变调用代码。可以通过父类引用来调用不同子类的具体实现,从而动态地选择调用的版本。
注意:Java 只支持单继承,即一个类只能有一个直接父类,不能同时继承多个类