永发信息网

关于Java的编译时多态和运行时多态

答案:2  悬赏:0  手机版
解决时间 2021-02-28 22:33
  • 提问者网友:做自己de王妃
  • 2021-02-28 11:47
class P
{
public static void m1()
{
System.out.println("1111");
}
public void m2(int a)
{
System.out.println(a);
}
public void m3()
{
m1();
m2(10);
System.out.println("333");
}
}

class Ch extends P
{
public static void m1()
{
System.out.println("444");
}
public static void m2()
{
System.out.println("555");
}
}

class NoneSense
{
public static void main(String args[])
{
new Ch().m2();
new Ch().m3();
}
}
如上代码,为什么输出是
555
1111
10
333
而不是
555
444
10
333
我觉得既然运行时类型是Ch,那么不应该运行Ch的m1()方法吗?
最佳答案
  • 五星知识达人网友:白昼之月
  • 2021-02-28 12:24
您想的有点复杂化了,简单的说吧,您说的运行时的多态是分为可执行文件和非可执行文件,也就是说您的程序打没打包,而您说的编译时的多态也分为两种;1、重载。2、继承。前者是静态的多态形式也就是说不可以用于多个类;针对方法,后者是可以在多个类之间使用,要记得只可以子类继承父类,不可‘以下犯上’。就像是java中的类型,一个是private,另一个是public。
全部回答
  • 1楼网友:有你哪都是故乡
  • 2021-02-28 13:31
个人看法 多态的概念 父类引用指向子类对象 而实际调用的方法为子类的方法。 编译时多态 java里叫重载 严格来说不叫多态 运行时多态 有继承 有重写 父类引用指向子类对象 例子我看就算了 书上多 的是
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯