📜  Java-继承(1)

📅  最后修改于: 2023-12-03 15:31:34.709000             🧑  作者: Mango

Java 继承

介绍

Java 中的继承是一个非常强大的面向对象的特性。继承可以让一个类从另一个类那里直接获得某些属性和方法,从而简化代码。

在 Java 中,一个类可以通过 extends 关键字继承另一个类的属性和方法。被继承的类称为父类,继承的类称为子类。

如何继承

Java 中,使用 extends 关键字创建子类。语法如下:

class SubClass extends SuperClass {
    // 子类代码
}

其中,SubClass 是子类,SuperClass 是父类。

子类继承父类的方式有两种:

方法1: 子类继承所有父类的 public 和 protected 属性与方法

这是最常见的一种方式,在子类中可以直接使用父类的属性和方法。

class SuperClass {
    public int publicVar;
    protected int protectedVar;
    
    public void publicMethod() {
        System.out.println("This is a public method.");
    }
    
    protected void protectedMethod() {
        System.out.println("This is a protected method.");
    }
}

class SubClass extends SuperClass {
    public void subMethod() {
        publicMethod(); // 子类可以直接使用 public 方法
        protectedMethod(); // 子类可以直接使用 protected 方法
        publicVar = 1; // 子类可以直接使用 public 属性
        protectedVar = 2; // 子类可以直接使用 protected 属性
    }
}

子类实例化后可以访问自己的属性和方法以及从父类继承来的属性和方法。

SubClass sub = new SubClass();
sub.subMethod();
方法2: 子类只继承所有父类的 public 属性和方法

此时,子类只可以继承父类的 public 属性和方法。如果父类中没有 public 的属性和方法,则子类就没有任何继承的属性和方法。

class SuperClass {
    protected int protectedVar;
    
    protected void protectedMethod() {
        System.out.println("This is a protected method.");
    }
}

class SubClass extends SuperClass {
    public void subMethod() {
        // 子类只可以使用从父类继承来的 public 方法
        // 子类无法使用 protected 方法
        protectedMethod(); // 会编译错误
        publicVar = 1; // 子类可以直接使用 public 属性
        protectedVar = 2; // 子类无法使用 protected 属性,会编译错误
    }
}
super 关键字

在子类中,super 关键字可以用来调用父类的方法和属性。可以使用 super() 调用父类的构造方法。

class SuperClass {
    protected int var;
    
    public SuperClass(int var) {
        this.var = var;
    }
    
    public void method() {
        System.out.println("This is a method of SuperClass.");
    }
}

class SubClass extends SuperClass {
    public SubClass(int var) {
        super(var); // 调用父类的构造方法
    }
    
    public void subMethod() {
        super.method(); // 调用父类的方法
    }
}
父子类的访问权限

当子类继承父类时,有一个重要的问题是子类可以访问父类的哪些属性和方法。Java 规定:

  1. 在父类中定义的 private 属性和方法,子类无法访问;
  2. 在父类中定义的 public、protected 和 default 属性和方法,子类可以访问;
  3. 在子类中定义的属性和方法,父类无法访问。
其他相关继承概念
  • 抽象类:父类中可以定义抽象方法,而子类必须实现这些抽象方法才能使用。抽象类不能被实例化。
  • 接口:与抽象类相似,但接口中只能定义抽象方法和常量。实现接口的类必须实现接口中定义的所有方法。
  • final 类:这种类不能被继承,因此它的方法也不能被重写。
  • final 方法:这种方法不能被重写。
总结

Java 的继承是面向对象编程中非常强大的一个特性,可以让我们简化代码,提高效率。理解继承的细节非常重要,这可以帮助你编写出更清晰、更可维护的代码。