访问子类中的超类变量/方法

Posted

技术标签:

【中文标题】访问子类中的超类变量/方法【英文标题】: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,你仍然会得到错误。 【参考方案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;

【讨论】:

以上是关于访问子类中的超类变量/方法的主要内容,如果未能解决你的问题,请参考以下文章

在java 中子类对象为啥不能比父类对象有更严格的访问权限?

爪哇 |父类和子类中的静态变量|从父类访问子 var 值

Java中的间接子类无法访问的超类中的受保护成员

从 PHP 中的超类获取子类命名空间

Java多态如何调用子类对象的超类方法

子类是不是从 Swift 中的超类扩展继承便利初始化程序?