package Base;
public class Base{;
protected int protected_data=4;
}
package Derived;
import Base*;
public class Derived extends Base{
Base a=new Base();
pulbic void dataUse()
System.out.println("protected_data="+a.protected_data);}
improt Derived*;
public static void main (String args[]){
Derived d=new Derived();
d.dataUse();}中的System.out.println("protected_data="+a.protected_data);不能输出保护成员,若将a.protected_data改为this.protected_data就可以输出,为什么呢?

解决方案 »

  1.   

    package Base; 
    public class Base{; 
    protected int protected_data=4; 

    package Derived; 
    import Base*; 
    public class Derived extends Base{ 
    Base a=new Base(); 
    pulbic void dataUse() 
    System.out.println("protected_data="+a.protected_data);} 
    improt Derived*; 
    public static void main (String args[]){ 
    Derived d=new Derived(); 
    d.dataUse();}
    先给你排版排版再看
      

  2.   

    this是一种特殊的引用,可以指代调用当前的对象,在构造函数中用于指代另一个构造函数。楼主的情况应该属于第二种吧。
      

  3.   

    我看错了 protected是子类可以调用滴,但在其他包里不能直接调用,所以a.protected_data不能用(此处的protected_data是属于base的)。this.protected_data的话代表的是继承来的(此处protected_data是Derived的),已经是自己的了,所以可以随便用.
    把他们放在一个包里就能用 ,刚刚没仔细看
      

  4.   

    权限问题吧,你在另一个包创建的BASE类的对象中看不到原来那个protected data
    但是子类继承的已经存在,可以使用,所以用this可以
      

  5.   

    a.protected_data 试图访问的是 Base a=new Base(); 中a的成员变量 但这个成员变量在包间是没有权限可访问的(protected_data 换pulbic就可以访问了)this.protected_data 访问的是Derived 对象自己的protected_data成员变量是有权限的
    但Derived 为什么有protected_data变量域? 因为class Derived extends Base 一个类继承另一个类就有了父类的实例变量域
      

  6.   

    this表示当前对象子类拥有父类属性所以this.protected_data是指子类中的protected_data而a.protected_data是指父类中的protected_data...当然输出有误
      

  7.   


    package Base; 
    public class Base {
    protected int protected_data=4; 
    } package Derived; 
    import Base*; 
    public class Derived extends Base{ 
    Base a=new Base();         //定义了一个b引用
    pulbic void dataUse() { 
    System.out.println("protected_data="+a.protected_data);    //a.protected_dat是错的,不能直接用对象引用直接调用protected修饰的成员
                                 //改为this.protected_date后调用的是Derived的成员,你现在是在它类里面,所以可以访问
    } import Derived*; 
    public class Test {
    public static void main (String args[]){ 
    Derived d=new Derived(); 
    d.dataUse();
    }
    }