为什么我们只能访问A类方法。为什么重写方法不能更具限制性?

时间:2014-10-30 05:26:19

标签: java oop

class A{
    public void m1(){}
    public void m2(){}
}

class B{
    public void m3(){}
    public void m1(){}

    public static void main(String args[]){
        A a=new B();
        a.m1();

        //Why we have access to A class methods only.
        // Why overriding methods cannot be more restrictive 
    }
}

3 个答案:

答案 0 :(得分:0)

a定义为类型A,因此a.m1()使用A中的方法m1()。

您可以使用B扩展A,然后您的代码将从B调用m。

答案 1 :(得分:0)

B"是A" A,因此您可以将B传递给doSomethingToA(A a)之类的方法。该方法正确地希望能够看到m1m2

您只能访问A个方法,因为a的类型为A - 它可能是A而不是B,因此您只能调用变量类暴露的方法。你coulkd将main更改为B a=new B();,现在你可以调用B方法。

答案 2 :(得分:0)

扩展类或实现接口时,可以覆盖。 也就是说,当我们谈论接口和继承时,覆盖是适用的。
在您的代码中,您正在重新定义不会覆盖的方法。

只能重写继承的方法,并记住私有 方法不是继承的。