【问题标题】:Accessing super class variables/methods in sub class访问子类中的超类变量/方法
【发布时间】:2017-08-22 18:09:16
【问题描述】:

既然子类可以访问父类定义为受保护的变量和方法,为什么下面的代码会出现编译错误?

public class Animal {
    protected int var;

    public void eat() {
        System.out.println("Animal eating");
    }
}
class Dog extends Animal {
    Animal an = new Animal();
    an.var = 10;
}

【问题讨论】:

  • 编译错误是什么?
  • 因为你在方法之外
  • 提示:即使你删除protected,你仍然会得到错误。

标签: java inheritance access-modifiers


【解决方案1】:

问题不是由varprotected 这一事实引起的。这是因为你需要将那一行包裹在一个方法中,像这样

public Dog(){
    an.var = 10; //Compiles Correctly
}

【讨论】:

    【解决方案2】:

    你需要把它放在一个方法中。见下文:

    类狗扩展动物{

    public void testMe()
    {
        Animal an = new Animal();
        an.var = 10;
    }
    

    }

    【讨论】:

      【解决方案3】:

      如果希望 Dog 类默认设置 var 属性,可以使用构造函数:

      public class Dog extends Animal {
      
          public Dog() {
              this.var=10;
          }
      }
      

      或使用:

      Dog dog = new Dog();
      dog.var=11;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-20
        • 1970-01-01
        • 2012-04-09
        • 1970-01-01
        • 2011-09-05
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多