在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 {@Overridepublic 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 {@Overridepublic void abstractMethod() {// 实现抽象方法}@Overridepublic void method1() {// 实现接口方法}@Overridepublic void method2() {// 实现接口方法} }
-
多态
- 多态是指同一个方法调用在不同的对象上有不同的行为。
- 通过父类引用调用子类对象的方法,可以实现多态。
class Parent {public void display() {System.out.println("Parent display");}
}class Child extends Parent {@Overridepublic 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 中只支持单继承,即一个类只能继承一个父类,但可以实现多个接口。
- 过多的继承层次可能导致代码复杂性和维护难度增加。