Java继承中的protected
在Java中,继承是一种重要的面向对象编程(OOP)概念,它允许子类继承父类的属性和方法。在继承关系中,有几个访问修饰符被用来控制成员的可见性,其中之一就是protected
。
protected修饰符
protected
是Java中的一种访问修饰符,它可以应用于类的成员变量、方法和构造函数。使用protected
修饰的成员在子类中是可见的,而在其他包中的非子类中则不可见。
类的成员变量
使用protected
修饰的成员变量可以被子类访问,也可以在同一包中的其他类中访问。下面是一个示例:
package com.example;
public class Vehicle {
protected String brand;
// ...
}
public class Car extends Vehicle {
public void setBrand(String brand) {
this.brand = brand;
}
}
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.setBrand("Toyota");
System.out.println(car.brand);
}
}
在上面的示例中,Vehicle
类中的brand
成员变量被声明为protected
,因此Car
类可以直接访问它并设置它的值。
如果将brand
成员变量声明为private
,则无法从Car
类中访问它。如果将brand
成员变量声明为public
,则可以从任何地方访问它。
类的方法
使用protected
修饰的方法可以被子类访问,也可以在同一包中的其他类中访问。下面是一个示例:
package com.example;
public class Vehicle {
protected void drive() {
System.out.println("Driving...");
}
}
public class Car extends Vehicle {
public void start() {
drive();
System.out.println("Starting...");
}
}
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.start();
}
}
在上面的示例中,Vehicle
类中的drive
方法被声明为protected
,因此Car
类可以直接调用它。
如果将drive
方法声明为private
,则无法从Car
类中调用它。如果将drive
方法声明为public
,则可以从任何地方调用它。
类的构造函数
使用protected
修饰的构造函数可以被子类访问,但不能通过类的实例直接访问。下面是一个示例:
package com.example;
public class Vehicle {
protected Vehicle() {
System.out.println("Creating a Vehicle object...");
}
}
public class Car extends Vehicle {
public Car() {
super();
}
}
public class Main {
public static void main(String[] args) {
Car car = new Car(); // 不能使用 new Vehicle() 创建对象
}
}
在上面的示例中,Vehicle
类中的构造函数被声明为protected
,因此Car
类可以通过super()
关键字来调用它。
小结
protected
修饰符在Java继承中起着重要的作用。它可以用于类的成员变量、方法和构造函数,允许子类访问并使用这些成员。与public
修饰符相比,protected
修饰符提供了更严格的可见性,它只在子类和同一包中可见。
希望本文能帮助您理解Java继承中的protected
修饰符的作用和用法。
参考资料:
- [Java Tutorial: Access Modifiers](