开发者社区> 问答> 正文

关于如何通过子类调用父类的父类中的方法

class A{
public A(){System.out.println("A created!");}
public int f(){
System.out.println("call A.f()");
return 1;
}
}
class B extends A{
public int f(){
System.out.println("call B.f()");
return 2;
}
public B(){System.out.println("B created!");}
}
class C extends B{
public int f(){
System.out.println("call C.f()");
return 3;
}
}
public class Test01{
public static void main(String args[]){
C c = new C();
System.out.println(((A)c).f());
}
}

将c转型成A,试图调用A中的f(),结果没有如我所愿,为什么呢?

展开
收起
蛮大人123 2016-03-20 17:24:08 2070 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    1、这就是java语言的多态性。
    2、考虑以下代码:
    A a = new C();
    a.f();
    访问方法:a的编译时类型是A,其只能调用A具有的方法,否则编译出错,你可以把A的方法f()改成g()试试。
    a的运行是类型是C,所以程序运行时,调用的是C的方法。
    访问属性:a的编译时类型是A,其只能调用A具有的属性,否则编译出错,你可以为C添加属性,然后用a访问试试。
    a的运行是类型是C,但是程序运行时,调用的是A的属性。
    3、考虑你的代码:
    C c = new C();
    编译时、运行时类型都是C,无法访问A的代码。

    2019-07-17 19:09:52
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
建立联系方法之一 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载