Java的继承概念

在Java中,继承是一种重要的面向对象编程概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。使用继承可以提高代码的复用性和可维护性。

  1. 继承的基本语法

    • 使用 extends 关键字来声明一个类继承自另一个类。
    class Parent {
        // 父类的属性和方法
    }
    
    class Child extends Parent {
        // 子类的属性和方法
    }
    
  2. 构造方法的调用

  • 子类的构造方法会隐式调用父类的无参构造方法。如果父类没有无参构造方法,必须显式调用父类的带参构造方法。
class Parent {
    public Parent(String name) {
        // 父类的带参构造方法
    }
}

class Child extends Parent {
    public Child() {
        super("defaultName"); // 显式调用父类的带参构造方法
    }
}
  1. 方法重写(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");
    }
}
  1. 方法重载(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");
    }
}
  1. 访问控制
  • 继承时,子类只能访问父类的 publicprotected 成员,不能访问 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 成员
    }
}
  1. final 关键字
  • 使用 final 关键字可以防止类被继承或方法被重写。
final class FinalClass {
    // 该类不能被继承
}

class Parent {
    public final void display() {
        // 该方法不能被重写
    }
}
  1. 抽象类和接口

    • 抽象类可以包含抽象方法和具体方法,子类必须实现抽象方法。
    • 接口中的方法默认是 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() {
            // 实现接口方法
        }
    }
    
  2. 多态

  • 多态是指同一个方法调用在不同的对象上有不同的行为。
  • 通过父类引用调用子类对象的方法,可以实现多态。
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"
    }
}
  1. 继承的层次
    • Java 中只支持单继承,即一个类只能继承一个父类,但可以实现多个接口。
    • 过多的继承层次可能导致代码复杂性和维护难度增加。
posted @ 2024-10-23 23:06  最爱菠萝  阅读(39)  评论(0编辑  收藏  举报