标题:为什么这个程序不能实现多态性?(Java新人)
只看楼主
赤云
Rank: 2
等 级:论坛游民
帖 子:82
专家分:35
注 册:2014-12-29
结帖率:64.71%
已结贴  问题点数:10 回复次数:9 
为什么这个程序不能实现多态性?(Java新人)
程序代码:
package ch01;

class  B extends A//派生类
{
    public void print(){
        System.out.println("子类中的print");
    }
    public static void main(String[] args)
    {
        A a=new B();
        a.print();//此处为什么调用的是类A的print()?
        B b=new B();
        b.print();
    }
}
class A//基类
{
    public A(){
        System.out.println("调用父类构造方法!");
    }
    public void print(){
        System.out.println("类A中的print");
    }
}

这是运行结果:
调用父类构造方法!
子类中的print
调用父类构造方法!
子类中的print
搜索更多相关主题的帖子: Java 多态性 
2015-09-11 09:19
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
得分:3 
你的运行结果调用的是B中的print

一片落叶掉进了回忆的流年。
2015-09-11 10:02
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
程序代码:
package ch01;

public class  B extends A//派生类      子类就好,不是C++
{
    public void print(){
        System.out.println("子类中的print");
    }
    public static void main(String[] args)
    {
        A a=new B();
        a.print();//此处为什么调用的是类A的print()?
        B b=new B();
        b.print();
    }
}
class A//基类   父类,还是C++学多了
{
    public A(){
        System.out.println("调用父类构造方法!");
    }
    public void print(){
        System.out.println("类A中的print");
    }
}

1.没有一个公有类,你是怎么运行的?
2.多态指的是编译和运行时不一样调用方法不一样!

  通过鼠标悬停(你应该这么做的)找调用方法找到的应该是父类的print方法,也就是编译时的调用方法出处

剑栈风樯各苦辛,别时冰雪到时春
2015-09-11 13:14
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
得分:0 
能不能运行跟有没有公共类没有直接关系,一个java文件里有多个类,编译后就会生成多个class文件,直接运行需要的那个class就行了
楼主这个应该是运行时多态,执行期间(而非编译期间)判断所引用对象的实际类型,根据实际类型判断调用哪个方法,因为实际对象是子类B,所以调用的是子类B的print方法

楼主的问题描述和运行结果有出入。。。
2015-09-11 14:38
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:3 
以下是引用calix在2015-9-11 14:38:00的发言:

能不能运行跟有没有公共类没有直接关系,一个java文件里有多个类,编译后就会生成多个class文件,直接运行需要的那个class就行了
楼主这个应该是运行时多态,执行期间(而非编译期间)判断所引用对象的实际类型,根据实际类型判断调用哪个方法,因为实际对象是子类B,所以调用的是子类B的print方法

楼主的问题描述和运行结果有出入。。。

剑栈风樯各苦辛,别时冰雪到时春
2015-09-11 15:11
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
得分:3 
回复 5楼 林月儿
这个说法有什么问题吗
2015-09-11 15:54
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
回复 6楼 calix
没有,我是菜鸟,刚学java请多指教

剑栈风樯各苦辛,别时冰雪到时春
2015-09-11 15:56
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
得分:0 
回复 7楼 林月儿

2015-09-11 16:08
wz372319877
Rank: 1
来 自:美国
等 级:新手上路
帖 子:1
专家分:3
注 册:2015-9-11
得分:3 
2015-09-11 17:44
nbko
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-4-17
得分:0 
向上转型,实际对象是B,所以调用B的print方法
2020-04-17 16:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-457214-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.863394 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved