Java 中关于关键字 protected的理解?
《Java核心卷一》中有一端protected 关键字的描写
这段话用代码解释的话,是什么意思?
回答:
4中修饰符,protected是子类保护,可以通过直接Class,package,subclass进行访问。
你标线的这句话有一些前提,就是要看每个类所在的package。
这句话的描述首先要Employee的多个子类在不同包。
比如Employee有两个子类Manager和Staff,分别在不同的package下。
这个时候,Manager可以使用Employee的hireDay,因为他是Emplyee的subclass
可以访问自己的hireDay,
但是不能访问Staff的hireDay,因为他既不是Staff的subclass,也不在相同的package
回答:
一个类的某个方法或者成员被设置为protected,那么他的子类便可以无限制的直接访问,这是我理解的protected。你这本书我也没读过,?sorry了
回答:
意思就是子类访问或修改父类变量,并不会影响其他父类的实例,仅影响这个子类相关的实例。
code:
class Employee{ protected int hireDay = 500;
public void printHireDay(){
System.out.println(hireDay);
}
}
class Manager extends Employee{
Manager(){
this.hireDay = 1000;
}
}
new Employee().printHireDay(); //500
new Manager().printHireDay(); //1000
回答:
按字面意思,Manager 类中的方法不能访问其它 Employee 对象中的 protected 域。但实际上,不管这个“其它Employee 对象”是 Employee 对象或是 Employee 的其它子类对象,其 hireDay 域都是可以访问的,所以这句话到底是什么意思,真不能理解,或许本身就是错的,也有可能是对于较老版本的 Java 语言来说是这样
class Employee { protected int hireDay = 500;
}
class Sub extends Employee {
protected int hireDay = 200;
}
class Manager extends Employee {
Sub someone = new Sub();
Employee anotherOne = new Employee();
public Manager() {
this.hireDay = 1000;
}
public void test() {
System.out.println(hireDay);
System.out.println(someone.hireDay); // 可以访问子类对象的 hireDay
System.out.println(anotherOne.hireDay); // 也可以访问 Employee 对象的
}
}
回答:
这句话应该是针对整个java来说的,因为除了设置成private的情况,其它情况都是这样的。
class Employee { protected int hireDay = 10;
public int hireDayPublic = 10; //public的情况
private int hireDayPrivate = 10; //private的情况
int hireDayNon = 10; //default的情况
public void printEmployee(){
System.out.println(hireDay);
System.out.println(hireDayPublic);
System.out.println(hireDayPrivate);
System.out.println(hireDayNon);
}
}
class Manager extends Employee {
Manager(){
this.hireDay = 20;
this.hireDayPublic = 20;
this.hireDayNon = 20;
}
public void setHireDay(int d){
this.hireDay = d;
this.hireDayPublic = d;
this.hireDayNon = d;
}
public void printManager(){
super.printEmployee();//尝试访问父类对象
}
}
public class Test {
public static void main(String[] args){
Employee e = new Employee();
Manager m = new Manager();
System.out.println("---e.printEmployee();");
e.printEmployee(); // 打印10,10,10,10
System.out.println("---m.printEmployee();");
m.printEmployee(); // 打印20,20,10,20
System.out.println("---m.printManager();");
m.printManager(); // 打印20,20,10,20
System.out.println("---");
System.out.println("---");
m.setHireDay(30);
System.out.println("---e.printEmployee();");
e.printEmployee(); // 打印10,10,10,10
System.out.println("---m.printEmployee();");
m.printEmployee(); // 打印30,30,10,30
System.out.println("---m.printManager();");
m.printManager(); // 打印30,30,10,30
}
}
以上是 Java 中关于关键字 protected的理解? 的全部内容, 来源链接: utcz.com/p/167782.html