超类  
 
package  net.eicp.sfgiuggese;  
 
 public  class  Manager    
{  
           protected  String  ddd="dd";  
 
}  
 
子类(和超类不同包)  
 
import  net.eicp.sfgiuggese.*;  
 
class  VisitTest  extends  Manager  
{  
                     public  VisitTest()  
               {}  
               public  static  void  main(String[]  args)  
               {  
                           VisitTest  vt=new  VisitTest();  
                           System.out.println(vt.ddd);//通过,是正常的  
                           vt.getDDD();  
                             
               }  
               public  void  getDDD()  
               {  
                           System.out.println(super.ddd);  
//也通过,这下问题就来了  
               }  
                 

子类的方法只能够访问子类对象的私有字段System.out.println(vt.ddd);
而不能访问超类对象的这个字段,那为什么我这样调用super.ddd也能能过?

解决方案 »

  1.   

    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=210858
      

  2.   

    没错, 是可以访问他的成员变量,但我的问题是出在super.dddprotected只能通过继承得到超类的protected,所以只能访问子类protected
    但是,不能访问超类的protected,而现在我都通过super来访问超类的protected了所以不解
      

  3.   

    谁说子类不能访问超类的protected啊? protected就是给子类访问的. 不明白你的不解在哪里.
      

  4.   

    在子类中创建一个子类对象,再调用protected的字段或方法可以成功
    但在子类中创建一个父类的对象是不能调用protected的字段和方法的如上例
    VisitTest  vt=new  VisitTest();  
    System.out.println(vt.ddd);//通过,是正常的  
    Manager  m=new Manager()
    System.out.println(m.ddd)//是不能通过的,我的意思就是这样记然不能通过父类的对象访问protected,那为什么还可以用super.ddd来访问
      

  5.   

    父类protected 子类可以跨包继承,父类私有的不可以访问
      

  6.   

    记然不能通过父类的对象访问protected,那为什么还可以用super.ddd来访问
      

  7.   

    哈哈,被protected 修饰的属性和方法可以在该类以及该类的子类中使用,而class  VisitTest  extends  Manager ,可以看出VisitTest继承与Manager, 所以在VisitTest中可以访问父类Manager中的protected属性。
      

  8.   

    父类protected 子类可以跨包继承,父类私有的不可以访问
      

  9.   

    就我看的这本书,我真的理解不出来书上的说法:
    protected只能通过继承得到超类的protected,所以只能访问子类protected
    但是,不能访问超类的protected都说了在子类中不能用超类来访问protected,只能在子类中用子类对象访问
    那为什么在子类中还能用super.XX来访问,这不是自打嘴巴吗???
    谁可以解释一下,分不够我开贴
      

  10.   

    搞清楚啊!用super.XX来访问就代表是从超类中访问么?这仍然还是从子类中访问啊!
    super所指向的那个超类对象是子类对象本身的一部分,它和用“new 超类()”这种形式创建的超类对象是两回事!
      

  11.   

    最佳答案还是这个 Dan1980() ( ) 信誉:98  2006-06-27 14:37:00  得分: 0  
     
     
       搞清楚啊!用super.XX来访问就代表是从超类中访问么?这仍然还是从子类中访问啊!
    super所指向的那个超类对象是子类对象本身的一部分,它和用“new 超类()”这种形式创建的超类对象是两回事!