首页 新闻 会员 周边 捐助

关于访问修饰符的一点疑问

0
悬赏园豆:10 [已解决问题] 解决于 2008-09-27 18:22

    public  class Class1
    {
        protected int bb;
        public int cc;
    }


    public class class2:Class1
    {
        public void foo()
       {
            //可得到base.bb,base.cc
            Class1 c=new Class1();
            //只能得到c.cc,不能访问受保护成员? 
        }
    }

 

为什么在派生类中,只能通过base才能访问到基类的protected成员,直接创建基类对象就访问不到了?

问题补充: 另外,如果我创建了一个class2的对象,则可以通过该对象访问基类的受保护成员了.为什么创建class1的对象却不能访问class1自己的成员呢? public class class2:Class1 { protected void foo() { //可得到base.bb,base.cc class2 d=new class2(); //可得到d.bb,d.cc Class1 c=new Class1(); //只能得到c.cc,不能访问受保护成员? } } 另外,如果我在class2的外面创建一个class2的对象,这时又不能通过该对象访问基类的受保护成员了???
RyanXM的主页 RyanXM | 初学一级 | 园豆:65
提问于:2008-09-17 09:31
< >
分享
最佳答案
0

1. protected 访问控制符能被用于方法和成员变量。 
2. 声明为protected的方法和成员变量能被同一个包里的所有类所访问,就像默认修饰符package一样。 
3. 能被该类的子类所访问,子类可以和父类不在一个包中。 
这样,当你想让一个类中的某个方法或成员变量在包中都可见,而且其子类也能访问(子类有可能和父类不在同一个包中)但又不想让所有类都可以访问该类时,就可以用protected修饰符。 
可访问性: 
public > protected > package >private

John Wu | 菜鸟二级 |园豆:220 | 2008-09-17 09:47
其他回答(2)
0

标识为Protected的类A中的成员,类A和从类A派生的类的方法可以访问

如果是类A的对象和从类A派生的对象是不能访问的

参考:Programming C#

这个季节的天 | 园豆:185 (初学一级) | 2008-09-17 10:41
0

因为

Class1 c=new Class1();

Class1是类, c是Class1的对象变量, 所以c能访问public的cc, protected的指在它自己成员内和派生类可见, 用base.bb访问到的并不是c的bb, 而是当前对象this从Class1继承来的bb

class2 d=new class2();
d是class2的对象变量,class2继承于Class1, 所以d能访问从class2中的成员和class2从Class1中继承来的成员(public, protected)

吴峰 | 园豆:117 (初学一级) | 2008-09-17 13:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册