A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张吉日 中级黑马   /  2012-8-8 20:49  /  1111 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚学java 半个月 有个小问题 希望大家帮我解除疑惑..
想明白其中的道理???
class Fu
{
        public void demo(){
        }
}
class Zi extends Fu
{
        public void demo(){
                System.out.print();
        }
}
class Test
{
        public void hdd(Fu f){
        f.demo       
        }
}
class TestDemo
{
        public static void main(String [] args){
                Test t = new Test();
                //t.hdd(new Fu);
                t.hdd(new Zi()); //      我提出的问题行???????????????!!!!!!!!!!!!!@@@@
        }
}
/*
问题那行在文中标出 ——>new Zi()是一个多态,原函数是Fu f = new Zi();
那么Zi z = new Zi();我说这个new Zi()是指的子类中的方法不行吗?还是要根据hdd方法中的类型参数来判断?
*/

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 一起加油,赞一个!

查看全部评分

2 个回复

倒序浏览
你的问题 问的有些古怪,   “我说这个new Zi()是指的子类中的方法不行吗?”   new Zi()是新建的一个子类对象,而不是方法
另外 public void hdd(Fu f){f.demo }  方法中 参数列表里 是 父类 类型变量 f,方法体中调用demo方法。

所以执行  t.hdd(new Zi()); 是没有问题,你自己不也是说 Fu f = new Zi();是多态么,父类引用指向子类对象,理解多态了的话 这个问题其实就不算是问题了

          “还是要根据hdd方法中的类型参数来判断?”   这个问题也很古怪,因为你的函数中只有一个函数调用语句,
void也不存在返回参数类型,所以哪有什么类型参数可以进行判断。这里其实只需要判断调用的是否子类特有方法就行,是的话就得将f强制转换
为子类类型才能调用该特有方法,如果不是子类特有,则用父类或子类对象都可以。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
尤洋 发表于 2012-8-8 21:44
你的问题 问的有些古怪,   “我说这个new Zi()是指的子类中的方法不行吗?”   new Zi()是新建的一个子类 ...

谢谢啊.我问的是是很奇怪..我再去看看多态
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马