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