A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

写程序时很少用protected,突然被问private和protected什么时候用?请举例说明。一时就想不起来了!不是问他们访问权限的区别,而是实际开发中什么时候用protected?

10 个回复

正序浏览
对于你的提问,我把Public、Protected、Private、Static都解释一下:
Public:最开放,所有的本程序集以及其他的程序集里面的对象都能够访问
Protected:比较开放,自身成员以及子类成员可访问
Private:只有自身成员才能够访问
Static:修饰类时表示该类时静态类,不能够实例化该类的对象,既然不能实例化该类,那么这个类也就不能够含有对象成员,即该类所有成员为静态;修饰类成员时,该成员为类成员,只能通过类.成员名的方式访问

这么说吧,假如你是一个类:
public表示你愿意其他人看见你的物品(字段、属性),或者你愿意帮别人做事(方法);
private表示你不愿意其他任何人看见你的私人物品,也不愿意帮任何人做事;
protected表示你愿意让你的子孙后代看见你的物品,也愿意帮他们做事。
代码示例下吧:
public class Person1
{
  private object Computer;//我有电脑,但别人不知道,也用不了
  private void Cook()
  {
  //我会做饭,但别人不知道,我也不帮别人做
  }
}

public class Person2
{
  protected object Computer;//我有电脑,只有我和我孩子知道,别人不知道也用不了
  protected void Cook()
  {
  //我会做饭,但只有我和我孩子知道,我给自己做,也给孩子做,但不给其他人做
  }
}

public class Person3
{
  public object Computer;//我有电脑,周围人(相同命名空间)都知道,大家都可以用
  public void Cook()
  {
  //我会做饭,周围人(相同命名空间)都知道,他们可以让我帮忙做饭
  }
}
回复 使用道具 举报
protected 表明被它修饰的成员变量为保护类型,在同一个包里和 public 类型是一样的,也是能够访问到的。但是如果在不同包里的 protected 类型的成员变量就只能通过子类来访问,这个修饰符是区别于其他的修饰符的。
示例
  package a;   
class door {  
 protected String color ;   
protected void openDoor()  
 {  
 System.out.println("protected 类型的成员变量,只能在不同包外的子类访问到!");  
 }   
}  
 public class wood_Door extends door {
  public static void main(String[] args)  
 {  
 wood_Door wd = new wood_Door ();  
 wd.openDoor();  
 }  
 }   代码解析:   door 的成员变量方法 openDoor 修饰为 protected 类型,只能通过在不同包下的子类来访问。如果 wood_Door 在同一个包下,那么和 public 类型是一样的了。如果其他类要访问 door 的方法,方法 openDoor 是访问不到的,因为对其他类而言相当于 private 类型的。
回复 使用道具 举报
李成 发表于 2012-3-25 15:20
简单点就是  
public 是公开的外部谁都可以访问。
private 是私有包括子类外部谁都不能访问。

我不知道具体在什么时候用protected,平时没用过!
回复 使用道具 举报
李成 中级黑马 2012-3-25 15:20:36
8#
简单点就是  
public 是公开的外部谁都可以访问。
private 是私有包括子类外部谁都不能访问。
protected 半公开有继承关系的子类可以访问,其他就不能访问。
回复 使用道具 举报
protected : 我刚才说父子对吧   父亲的东西儿子也可以使用  那说明是继承呀   一个父类如果你类型为public  所有的类都可以访问 但是使用protected 只有子类才可以使用  说起来应该也是一种保护方式  
回复 使用道具 举报
public,protected,private除了用来表示类成员的访问权限外,还可以用来设置继承的方式。
回复 使用道具 举报
private:一本封装javadeen的时候用  还记得OOP的封装性吗 很多都是通过private来封装
protected:就是内部才可以使用比如你家里的家具 不是说只有你才可以使用  你儿子也一样可以使用 有使用权  问题去结合OOP去思考  一切就合理了
回复 使用道具 举报
private 一般是单态模式的构造函数用的多,封装时也会用

protected 基本上也是封装占的多一些,就是一些具体的类只能在包内调用
回复 使用道具 举报
鲍亚坤 发表于 2012-3-25 13:54
private封装时候会用

protected什么时候用啊?我没什么实际开发经验,也没用过
回复 使用道具 举报
private封装时候会用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马