java中子类调用祖父类(父类的父类)的方法

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的结构解决问题,也不要改变集成关系解决问题。

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方法
    }
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-08
new A(); 就好了
没有直接的办法。可以重载B中的方法
想实现类似的功能到也是可以的。但是,如果在实际的应用中如果发现你的代码需要这样,那基本上说明你的设计很有问题!
第2个回答  2019-11-12
《深入理解java虚拟机里面有写》
如果Son继承了Father,Father继承了GrandFather,
且Son重写了Father里面的该方法,Father重写了GrandFather里面的该方法。
可以通过MethodHandle 的invoke方法调用到祖父类GrandFather中的方法。
第3个回答  2011-07-08
B继承A并且重写了A的methodTest方法
并且C继承了B
这时你new了一个C,这样B的methodTest方法就重写了A的methodTest方法
所以在C中你是无法取得A的methodTest方法的
第4个回答  2011-07-08
输出不了, 因为C继承B, B继承A
C里面的方法public boolean methodTest() 和B, A里的方法完全相同(类型boolean, 名字methodTest(), 无参数)
JAVA只能调用子类的方法
你要么把方法换了, 要么别继承B

JAVA子类继承了父类,那么子类怎么调用父类的方法?
对于已覆盖的方法来说,例如Child是Parent的子类,而且,Child和Parent都有个toString()方法,也就是说,Child覆盖Parent的toString()方法。如果child要调用Parent的toString()方法,只需要把child强制转换为Parent就可以,也就是(Parent)child.toString(),这样就是调用其父类的toString()方法。如果不是覆盖...

java子类继续父类,怎么调用父类里面的方法?
通过super调用父类的方法\\x0d\\x0a举例:\\x0d\\x0apublic class Father{\/\/定义父类\\x0d\\x0a public void s(){\/\/定义父类的方法s\\x0d\\x0a }\\x0d\\x0a}\\x0d\\x0apublic class Son extends Father{\/\/定义子类son,继承父类father\\x0d\\x0a public void s(){\/\/定义子类...

java中父类方法可以被子类直接调用吗
如果该方法没有被子类及其父类重写的话,直接用子类对象就可以调用了,如:child.getName();只要两者有一个重写了,就必须用super.super来调用:super.super.getName();

子类的成员方法会直接调用父类的方法吗?Java 中调用子类的方法和父类...
Override public void run() {\/\/ 子类重写父类的方法run System.out.println("Dog四条腿跑");} } public class Test { public static void main(String[] args) { \/\/ 调用父类属性a System.out.println(new Animal().i);\/\/ 调用子类方法run new Dog().run();\/\/这是因为子类重写了父类...

java中子类如何调用继承自父类的属性变量?
首先要求父类的属性为public,然后子类对象.属性 或为protected,然后在子类函数中 super.属性

java中子类继承父类后,子类就能调用父类的方法吧?,为啥我写的子类不...
老子能调儿子。儿子没那么大能力。。是父类引用指向子类对象后,所说的父类引用可以调用子类的具体方法解决问题。方法要执行就要有对象,子类对象从来不能调用父类对象的方法,只能说子类对象里有父类对象的继承来的方法,实际调用的还是子类的方法,由于继承,所以默认有父类的非私有方法。

子类对象调用父类方法算不算重载?
子类拥有父类的所有方法 子类中继承父类中所有的方法,在父类中声明的方法在子类内部可以直接调用。说明:如果访问控制符限制则无法访问。子类不拥有父类的构造方法 子类不继承父类的构造方法,如果需要在子类内部使用和父类传入参数一样的构造方法,则需要在子类内部重新声明这些构造方法。子类类型是父类...

java中不同包中的子类怎么调用父类中的
您好,很高兴和您一起讨论问题,如下是我的想法:java中的权限控制有四种:public、protected、不写的时候、private,按照这样的顺序依次变得严格。要想在不同包的子类中调用父类的方法\/变量,应该使用protected、public控制关键字。谢谢,个人之见!

如何在Java中使用子类继承父类的父类,举个例子看看,谢谢
public String name="haha";\/\/名字 public void say() {\/\/说话方法 System.out.println(name+" say hi");} } class Cat extends Animal{\/\/猫类继承了动物类 } public class Test { public static void main(String[] args) { Cat cat=new Cat();\/\/实例化一个猫 cat.say();\/\/由于猫...

子类调用父类的方法是用this好还是parent
){ System.out.println("子1"); }}在B类的方法中想输出“父2”:this.method2()、super.method2()或直接method2()没区别。因为就一个名为method2的方法。想输出“父1”只能用super.method1()。因为已经被重写了。想输出“子1”可以用this.method1()或method1()。

相似回答