java中子类调用祖父类(父类的父类)的方法
publicclassA{publicbooleanmethodTest(){System.out.println("A=========================...
public class A {
public boolean methodTest(){
System.out.println("A==================================");
return true;
}
}
public class B extends A{
public boolean methodTest(){
System.out.println("B==================================");
return false;
}
}
public class C extends B{
public boolean methodTest(){
return super.methodTest();
}
}
public class TestClass {
public static void main(String[] args){
C c = new C();
c.methodTest();
}
}
注意:前提是不改变A,B的代码。
现在输出的是“B==================================”
如何能*只*输出A==================================
那个.........好吧!是我没说明白。不要试图改变A,B的结构解决问题,也不要改变集成关系解决问题。 展开
public boolean methodTest(){
System.out.println("A==================================");
return true;
}
}
public class B extends A{
public boolean methodTest(){
System.out.println("B==================================");
return false;
}
}
public class C extends B{
public boolean methodTest(){
return super.methodTest();
}
}
public class TestClass {
public static void main(String[] args){
C c = new C();
c.methodTest();
}
}
注意:前提是不改变A,B的代码。
现在输出的是“B==================================”
如何能*只*输出A==================================
那个.........好吧!是我没说明白。不要试图改变A,B的结构解决问题,也不要改变集成关系解决问题。 展开
8个回答
展开全部
1、如果是多态,只能通过super的方式调用基类方法,具体决定于父类是否覆盖了父类的父类方法,如果父类的方法覆盖了父类的父类,则super无法调用到父类的父类方法。如果父类的方法没有覆盖父类的父类,则super可以调用到父类的父类方法。
public class A{//定义类A
public void show(){
}
}
public class B extends A{//定义子类B,继承类A
public void show(){
super.show();//调用父类A的方法show
}
}
2、如果不是多态,则可以直接访问方法名就能够访问到父类的父类方法
public class A{//定义类A
public void show(){
}
}
public class B extends A{//定义子类B,继承类A
public void me(){
show();//调用的是父类A中定义的show方法
}
}
展开全部
new A(); 就好了
没有直接的办法。可以重载B中的方法
想实现类似的功能到也是可以的。但是,如果在实际的应用中如果发现你的代码需要这样,那基本上说明你的设计很有问题!
没有直接的办法。可以重载B中的方法
想实现类似的功能到也是可以的。但是,如果在实际的应用中如果发现你的代码需要这样,那基本上说明你的设计很有问题!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
《深入理解java虚拟机里面有写》
如果Son继承了Father,Father继承了GrandFather,
且Son重写了Father里面的该方法,Father重写了GrandFather里面的该方法。
可以通过MethodHandle 的invoke方法调用到祖父类GrandFather中的方法。
如果Son继承了Father,Father继承了GrandFather,
且Son重写了Father里面的该方法,Father重写了GrandFather里面的该方法。
可以通过MethodHandle 的invoke方法调用到祖父类GrandFather中的方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
B继承A并且重写了A的methodTest方法
并且C继承了B
这时你new了一个C,这样B的methodTest方法就重写了A的methodTest方法
所以在C中你是无法取得A的methodTest方法的
并且C继承了B
这时你new了一个C,这样B的methodTest方法就重写了A的methodTest方法
所以在C中你是无法取得A的methodTest方法的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输出不了, 因为C继承B, B继承A
C里面的方法public boolean methodTest() 和B, A里的方法完全相同(类型boolean, 名字methodTest(), 无参数)
JAVA只能调用子类的方法
你要么把方法换了, 要么别继承B
C里面的方法public boolean methodTest() 和B, A里的方法完全相同(类型boolean, 名字methodTest(), 无参数)
JAVA只能调用子类的方法
你要么把方法换了, 要么别继承B
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询