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

回到顶部