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
}
}
答案 0 :(得分:0)
a定义为类型A,因此a.m1()使用A中的方法m1()。
您可以使用B扩展A,然后您的代码将从B调用m。
答案 1 :(得分:0)
B
"是A" A
,因此您可以将B
传递给doSomethingToA(A a)
之类的方法。该方法正确地希望能够看到m1
和m2
。
您只能访问A
个方法,因为a的类型为A
- 它可能是A
而不是B
,因此您只能调用变量类暴露的方法。你coulkd将main更改为B a=new B();
,现在你可以调用B方法。
答案 2 :(得分:0)
扩展类或实现接口时,可以覆盖。
也就是说,当我们谈论接口和继承时,覆盖是适用的。
在您的代码中,您正在重新定义不会覆盖的方法。
只能重写继承的方法,并记住私有 方法不是继承的。