| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 641 人关注过本帖
标题:新学 java,关于覆盖和重载
只看楼主 加入收藏
未未来
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:182
专家分:157
注 册:2012-11-6
结帖率:94.87%
收藏
已结贴  问题点数:10 回复次数:6 
新学 java,关于覆盖和重载
程序代码:
public class cover_equal {

    public static void main(String[] args) {
        
        // TODO 自动生成的方法存根
father f=new son();
son f2=new son();
f.test(f2);
}    
}    
    class  father {
        int radius;
        public father() {
            // TODO 自动生成的构造函数存根
            radius=1;
        }
        public void  test(father f){
            System.out.println(1111);
        }    
    }
     
     class son extends father{
         public son() {
            // TODO 自动生成的构造函数存根
        radius=2;
         }
    public void test(son s){
        System.out.println(2222);
    }     
     }


这个测试里,f的实际类型是Circle 根据动态绑定运行的将是son类的test函数,而且函数的参数类型也是对的,为什么调用的是father类的test,当然这属于重载而不是覆盖.
如果把son的类中的test函数的参数s改成father类型,这样就办成了覆盖,然后会根据动态绑定运行son类的test.  初学请教一下原因.
搜索更多相关主题的帖子: java father 
2014-09-17 19:56
sut
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-9-11
收藏
得分:0 
在子类和父类中你的test方法参数不是一个类型,是重载
2014-09-17 21:08
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:10 
不要太过于纠缠于这个问题,人家规定就是这样的,你再怎么思考都没结果,帮你整理一下思路。
程序代码:
class human{//human是父类
public void eat(){}
}

class man extends human{//man是子类
public void eat(){//该方法是对父类的eat方法进行重写
System.out.println("something");
}
public static void main(Stirng[]args){
human h=new man();
/*
  不多解释了,h是属于向上型对象,你只需要记住h既是human的实例,
也是man的实例,别问为什么,人家规定就是这样子,如果你质疑,可
以使用instanceof来判断一下h的类型。
*/
h.eat();
/*
前面说了,子类man中的eat方法是重写,重写的意思就是方法头部完全相同,
但方法体不相同。
而向上型对象只会调用子类重写父类的那些方法,所以吊桶子类的eat方法。
*/
}
另外一种就是重载了,重载就是方法名相同,但参数类型和个数不一样。
在man子类中新增一个方法:
public void eat(man a){//该方法是相对于父类来说是重载
System.out.println("nothing");
}
然后再看h.eat();此时,h是不会调用子类中新增的eat方法,前面
也说过了,h即是父类的实例也是子类的实例,自然就调用父类的eat方法了。


不学吐槽了,深究只会让你越陷越深,失去信心,记住规则是别人定的,
是这样就是这样,记住就好了。

思考赐予新生,时间在于定义
2014-09-17 22:07
未未来
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:182
专家分:157
注 册:2012-11-6
收藏
得分:0 
回复 3 楼 love 云彩
谢谢,我想我学语言的方法有问题,学语言主要是会用,而不是过分在意细节
2014-09-17 22:52
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
不仅是会用,还要有自己的理解和想法,不然等你学SSH会变得很被动的

思考赐予新生,时间在于定义
2014-09-17 23:20
未未来
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:182
专家分:157
注 册:2012-11-6
收藏
得分:0 
回复 5 楼 love 云彩
多谢指点。。。~
2014-09-17 23:56
舞动的精灵32
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-9-24
收藏
得分:0 
回复 2 楼 sut
讲解的不错,很清晰。这里如果要调用子类的eat()方法要强制类型转换,man h1=(man)h
2014-09-25 22:03
快速回复:新学 java,关于覆盖和重载
数据加载中...
 
   



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

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