Java中的继承是一个基本的面向对象编程(OOP)概念。继承允许我们创建一个新类(称作子类或派生类),基于一个已有的类(称作父类或基类)。子类继承父类的属性和方法,同时还可以添加新的属性和方法或者覆盖(重写)父类中的方法。
为什么使用继承?
- 代码重用:子类可以使用父类中的代码,不需要重复编写相同的代码。
- 建立类之间的关系:通过继承可以创建类的层次结构,反映现实中的实体间的父子关系。
- 方法重写:子类可以根据自己的特性覆盖(重写)父类的方法。
如何在Java中使用继承?
在Java中,我们使用extends
关键字来创建一个类的子类。
// 基类/父类
class Animal {
void eat() {
System.out.println("This animal eats food.");
}
}
// 子类/派生类
class Dog extends Animal {
// 子类可以拥有自己的属性和方法
void bark() {
System.out.println("The dog barks.");
}
// 子类可以重写父类的方法
@Override
void eat() {
System.out.println("This dog eats bones.");
}
}
public class Main {
public static void main(String[] args) {
// 创建Dog类的实例
Dog d = new Dog();
// 调用Dog类的方法
d.eat(); // 输出: This dog eats bones.
// 调用从Animal继承来的方法
d.bark(); // 输出: The dog barks.
}
}
继承的特点:
- 支持单继承:在Java中,一个子类只能有一个父类。
- 多层继承:一个类可以是另一个类的子类,同时也可以是其他类的父类。
注意的限制:
- 私有成员的继承:虽然子类不能直接访问父类的私有成员(属性和方法),但是通过父类的公共/getter/setter方法还是可以间接访问。
- 构造方法不会被继承:每个类都有自己的构造方法,子类不会继承父类的构造方法。但是,子类的构造方法内部会隐式或显式地调用父类的构造方法来初始化父类组件。
- 最终类和方法:使用
final
关键字标记的类不能被继承,使用final
关键字标记的方法不能被重写。
继承是合理使用OOP原则的基础,它提供了强大的方式来组织和结构化代码。