在Java中,继承是一种重要的面向对象编程概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。使用继承可以提高代码的复用性和可维护性。
-
继承的基本语法
- 使用
extends
关键字来声明一个类继承自另一个类。
class Parent { // 父类的属性和方法 } class Child extends Parent { // 子类的属性和方法 }
- 使用
-
构造方法的调用
- 子类的构造方法会隐式调用父类的无参构造方法。如果父类没有无参构造方法,必须显式调用父类的带参构造方法。
class Parent {
public Parent(String name) {
// 父类的带参构造方法
}
}
class Child extends Parent {
public Child() {
super("defaultName"); // 显式调用父类的带参构造方法
}
}
- 方法重写(Override)
- 子类可以重写父类的方法,但必须保持方法签名一致。
- 使用
@Override
注解来确保方法确实被重写了。
class Parent {
public void display() {
System.out.println("Parent display");
}
}
class Child extends Parent {
@Override
public void display() {
System.out.println("Child display");
}
}
- 方法重载(Overload)
- 方法重载是指在一个类中定义多个同名但参数列表不同的方法。
- 方法重载与继承无关,但要注意不要在子类中无意地重载了父类的方法。
class Parent {
public void display(int a) {
System.out.println("Parent display with int");
}
}
class Child extends Parent {
public void display(String s) {
System.out.println("Child display with String");
}
}
- 访问控制
- 继承时,子类只能访问父类的
public
和protected
成员,不能访问private
成员。 - 可以通过
protected
关键字来控制成员的访问范围。
class Parent {
protected int age;
private String name;
public String getName() {
return name;
}
}
class Child extends Parent {
public void printAge() {
System.out.println(age); // 可以访问 protected 成员
}
}
- final 关键字
- 使用
final
关键字可以防止类被继承或方法被重写。
final class FinalClass {
// 该类不能被继承
}
class Parent {
public final void display() {
// 该方法不能被重写
}
}
-
抽象类和接口
- 抽象类可以包含抽象方法和具体方法,子类必须实现抽象方法。
- 接口中的方法默认是
public abstract
的,实现接口的类必须实现所有方法。
abstract class AbstractClass { public abstract void abstractMethod(); public void concreteMethod() { // 具体方法 } } interface MyInterface { void method1(); void method2(); } class MyClass extends AbstractClass implements MyInterface { @Override public void abstractMethod() { // 实现抽象方法 } @Override public void method1() { // 实现接口方法 } @Override public void method2() { // 实现接口方法 } }
-
多态
- 多态是指同一个方法调用在不同的对象上有不同的行为。
- 通过父类引用调用子类对象的方法,可以实现多态。
class Parent {
public void display() {
System.out.println("Parent display");
}
}
class Child extends Parent {
@Override
public void display() {
System.out.println("Child display");
}
}
public class Main {
public static void main(String[] args) {
Parent parent = new Child(); // 父类引用指向子类对象
parent.display(); // 输出 "Child display"
}
}
- 继承的层次
- Java 中只支持单继承,即一个类只能继承一个父类,但可以实现多个接口。
- 过多的继承层次可能导致代码复杂性和维护难度增加。