江明涛的博客
Java继承的访问修饰符
Java继承的访问修饰符

Java继承的访问修饰符

在Java编程语言中,继承是一种非常重要的概念。通过继承,我们可以利用已有的类来创建新的类,并且可以重用父类的属性和方法。在Java中,继承的访问修饰符有public、protected、default和private四种。

首先,public修饰符表示该属性或方法可以被任何类所访问。当我们将一个属性或方法声明为public时,他们将在整个程序中可见。例如:

public class Animal {
    public String name;
    
    public void eat() {
        System.out.println(name + " is eating");
    }
}
public class Dog extends Animal {
    public void bark() {
        System.out.println(name + " is barking");
    }
}
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name = "Tom";
        dog.eat();  // 输出:Tom is eating
        dog.bark(); // 输出:Tom is barking
    }
}

在上面的例子中,Animal类中的name属性和eat方法都被声明为public,因此在Dog类中可以直接访问它们。

接下来是protected修饰符,它表示该属性或方法只能在当前类、子类和同一个包中的类中访问。例如:

public class Animal {
    protected int age;
    
    protected void run() {
        System.out.println("The animal is running");
    }
}
public class Dog extends Animal {
    public void play() {
        age = 2;
        run();  // 输出:The animal is running
        System.out.println("The dog is playing");
    }
}
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.play(); // 输出:The animal is running
                     The dog is playing
    }
}

在上面的例子中,Animal类中的age属性和run方法都被声明为protected,虽然它们不能在Main类中直接访问,但可以在Dog类中直接访问。

然后是default修饰符,它表示该属性或方法只能在同一个包中的类中访问。如果没有明确地指定访问修饰符,则默认为default。例如:

package com.example;
public class Animal {
    String color;
    
    void sleep() {
        System.out.println("The animal is sleeping");
    }
}
package com.example;
public class Cat extends Animal {
    void play() {
        color = "black";
        sleep();  // 输出:The animal is sleeping
        System.out.println("The cat is playing");
    }
}
package com.example;
public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.play(); // 输出:The animal is sleeping
                     The cat is playing
    }
}

在上面的例子中,Animal类中的color属性和sleep方法都没有指定访问修饰符,因此它们被视为default,并且可以在Cat类中直接访问。

最后是private修饰符,它表示该属性或方法只能在当前类中访问。例如:

public class Animal {
    private String gender;
    
    private void sleep() {
        System.out.println("The animal is sleeping");
    }
}
public class Cat extends Animal {
    void play(String gender) {
        this.gender = gender;  // 编译错误,无法访问父类的private属性
        sleep();  // 编译错误,无法访问父类的private方法
        System.out.println("The cat is playing");
    }
}
public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.play("female");
    }
}

在上面的例子中,Animal类中的gender属性和sleep方法都被声明为private,因此它们不能在Cat类中直接访问。

继承的访问修饰符在Java编程中起着非常重要的作用,它们决定了属性和方法在不同类中的可见性和可访问性。合理地使用访问修饰符,可以提高代码的安全性和可维护性。