在Java中使用没有实例变量的实例方法

时间:2016-08-28 11:05:48

标签: java

我是Java语法的新手,正在研究有关受保护访问修饰符的问题。标题为“受保护的成员从java中的不同包访问 - 一种好奇心”。

Protected member access from different packages in java - a curiosity

在该问题中,提到了以下代码:

package packageOne;

public class Base{
    protected void display(){
    system.out.println("in Base");
    }
}

package packageTwo;

public class Derived extends packageOne.Base{
    public void show(){
    new Base().display();//this is not working throws compilation error that
                         //display() from the type Base is not visible   
    new Derived().display();//is working
    display();//is working
    }
}

我的问题是关于最后一行代码。

display(); //is working

对我来说,这行不能编译,这是有道理的,因为该方法是从静态上下文中引用的。

我理解使用受保护成员和引用变量类型的规则,但是使用没有引用变量的非静态受保护成员似乎让我感到困惑。

阅读答案,除了最后一个答案外,我没有看到其他人对此有任何问题。但这个答案似乎与提出的问题无关。

对不起,这个问题可能看起来很迂腐或原始,但这会让我烦恼,因为这打破了OO编程。

我在这里遗漏了什么吗?请建议,

谢谢

2 个答案:

答案 0 :(得分:5)

  

对我来说,这一行不能编译,这是有道理的,因为该方法是从静态上下文中引用的。

不,不是。它位于实例方法(show)中。在Java中,在实例方法中,this.在引用其他实例方法和字段时是可选的。例如,如果对display的调用是在实例方法中(并且它在该代码中),则display();this.display();完全相同。

答案 1 :(得分:0)

该方法不是从静态内容引用的。
Equation是一种实例方法。 你在尝试使用相同的代码,但是在main()中吗?