Java 受保护访问 理解问题

天花天花板 2019-12-25 11:36:32

有大佬能解释一下,标绿部分怎么理解吗
...全文
153 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
stacksoverflow 2019-12-25
  • 打赏
  • 举报
回复
把下面代码编译一下,看看出错提示你就全明白了。 注意每个类的package

package csdn1225.p1;

public class Employee {
	protected String hireDay;
}


package csdn1225;

import csdn1225.p1.Employee;

public class Manager extends Employee{
	
	private Employee otherEmp = new Employee();
	
	public void setHireDay(){
		hireDay = "aa";
		otherEmp.hireDay = "dd";
	}
	
	public void print(){
		System.out.println("otherEmp:"+otherEmp.hireDay);
		System.out.println("manager:"+hireDay);
		
	}
}


package csdn1225;

public class Test{
	public static void main(String[] args){
		Manager m1 = new Manager();
		
		m1.setHireDay();
		m1.print();
	}
}

天花天花板 2019-12-25
  • 打赏
  • 举报
回复
https://blog.csdn.net/weixin_33911824/article/details/92698687
天花天花板 2019-12-25
  • 打赏
  • 举报
回复
引用 4 楼 伊莱文要变强啊 的回复:
意思就是比如说 emplyee是父类 manager子类有一个对象B 因为manager继承了emplyee,同时把,emolyee中的protect 和public 的成员变量以及方法都继承了。也就是说manager也有一个protect的hireDay。 也就是说B可以直接访问B.hireDay。但是不能访问到emplyee.hireDay。
你这里employee.hireDay是什么意思? “manager也有一个protect的hireDay。”你的意思是还有一个employee的hireDay吗? 但是对于一句new Manager(); 不是只会生成一个对象,他包含父类的动态域和子类的动态域,这里hireDay应该是只有一个吧?
zzzzzzzzzzzw___ 2019-12-25
  • 打赏
  • 举报
回复
引用 6 楼 天花天花板 的回复:
[quote=引用 4 楼 伊莱文要变强啊 的回复:] 意思就是比如说 emplyee是父类 manager子类有一个对象B 因为manager继承了emplyee,同时把,emolyee中的protect 和public 的成员变量以及方法都继承了。也就是说manager也有一个protect的hireDay。 也就是说B可以直接访问B.hireDay。但是不能访问到emplyee.hireDay。
对于Manager B = new Manger(); 不是只有一个对象实例吗?对于对象B他有一个域hireDay。 employee.hireDay是属于哪里的?[/quote] 你对比这个理解一下,只看前面的就行。 https://wenku.baidu.com/view/ee02ed29a8114431b90dd847.html
天花天花板 2019-12-25
  • 打赏
  • 举报
回复
引用 4 楼 伊莱文要变强啊 的回复:
意思就是比如说 emplyee是父类 manager子类有一个对象B 因为manager继承了emplyee,同时把,emolyee中的protect 和public 的成员变量以及方法都继承了。也就是说manager也有一个protect的hireDay。 也就是说B可以直接访问B.hireDay。但是不能访问到emplyee.hireDay。
对于Manager B = new Manger(); 不是只有一个对象实例吗?对于对象B他有一个域hireDay。 employee.hireDay是属于哪里的?
zzzzzzzzzzzw___ 2019-12-25
  • 打赏
  • 举报
回复
引用 3 楼 天花天花板 的回复:
那么书上这句话是什么意思呢? 他说“不能访问其他Employee对象中的hireDay域”是什么意思? 这里Manger类是Employee类的子类, hireDay域 是Employee类里面的一个protected成员
如果你还不懂,可以仔细看一下java类的继承
zzzzzzzzzzzw___ 2019-12-25
  • 打赏
  • 举报
回复
意思就是比如说 emplyee是父类 manager子类有一个对象B 因为manager继承了emplyee,同时把,emolyee中的protect 和public 的成员变量以及方法都继承了。也就是说manager也有一个protect的hireDay。 也就是说B可以直接访问B.hireDay。但是不能访问到emplyee.hireDay。
天花天花板 2019-12-25
  • 打赏
  • 举报
回复
那么书上这句话是什么意思呢? 他说“不能访问其他Employee对象中的hireDay域”是什么意思? 这里Manger类是Employee类的子类, hireDay域 是Employee类里面的一个protected成员
  • 打赏
  • 举报
回复
https://blog.csdn.net/weixin_43876121/article/details/103503251
zzzzzzzzzzzw___ 2019-12-25
  • 打赏
  • 举报
回复
public表示全部开放,所有地方的类、子类都可以直接访问、覆盖,这个很好理解。 protected表示受保护,记住一点,对于同一个包内的类,包括派生出的子类,它相当于public。另外对于包外的派生出的子类,它也相当于public。 defalut就是没有修饰符,被称为友好的。实际上它比protected还要还要更严格一点。在同一个包内,它也相当于是public。但是对于包外,它相当于private,这就是它比protected严格的地方。  private表示完全封闭,除了本类,其它任何地方都不可访问,不可见。这个也很好理解。
天花天花板 2019-12-25
  • 打赏
  • 举报
回复
引用 11 楼 stacksoverflow 的回复:
把下面代码编译一下,看看出错提示你就全明白了。 注意每个类的package

package csdn1225.p1;

public class Employee {
	protected String hireDay;
}


package csdn1225;

import csdn1225.p1.Employee;

public class Manager extends Employee{
	
	private Employee otherEmp = new Employee();
	
	public void setHireDay(){
		hireDay = "aa";
		otherEmp.hireDay = "dd";
	}
	
	public void print(){
		System.out.println("otherEmp:"+otherEmp.hireDay);
		System.out.println("manager:"+hireDay);
		
	}
}


package csdn1225;

public class Test{
	public static void main(String[] args){
		Manager m1 = new Manager();
		
		m1.setHireDay();
		m1.print();
	}
}

哦 放在不同的包里的意思啊,感觉书里这句话没讲清楚。233

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧