黑马程序员技术交流社区

标题: 子类返回值默认要大于等于父类返回值这句话如何理解呢? [打印本页]

作者: 15369308090    时间: 2017-4-15 23:24
标题: 子类返回值默认要大于等于父类返回值这句话如何理解呢?
好吧,我不是在水贴,这句话真的今天没理解了,问同学也都一知半解,讲不明白,求论坛的大神给我解答一下,万分感谢

问题:
子类返回值默认要小于或者等于父类返回值      与这句话对应的是: 子类修饰符类型要大于或者等于父类修饰符类型
后面这句我理解了,就是前面这句不大清楚,不知道在这的返回值是什么意思...............啊啊啊啊啊啊啊啊啊啊啊啊啊
求大神解答,

作者: 597824751    时间: 2017-4-16 02:12
思来想去发现继承中的方法要不重写要不就子类特有,跟返回值扯上了什么联系?

作者: fansilek    时间: 2017-4-16 15:20
单独一句话看不懂 最好能有上下文

作者: love20121217    时间: 2017-4-16 21:21
管他是什么 子类父类永远写一样的不就可以了
作者: 千千阙歌    时间: 2017-4-16 22:59
看看看看
作者: DreamBoyMrsLin    时间: 2017-4-17 00:39
我表示没有看懂  这个跟返回值有什么关系?多态也没有这种说法呀  就算是继承  或者重写  最多就是修饰符的问题  返回值我是真的不知道了  
作者: 丿UNDY    时间: 2017-4-17 08:37
是继承的问题吗 没太看明白lz要问什么。。
作者: 15369308090    时间: 2017-4-17 23:33
597824751 发表于 2017-4-16 02:12
思来想去发现继承中的方法要不重写要不就子类特有,跟返回值扯上了什么联系?
...


子父类重写,如果子类重写了父类的方法,必须要走子类的重写吧,
当创建子类对象的时候,重写的方法被子类调用,但调用前要看返回值类型,因为方法规则是编译期看父类,如果返回值类型大于父类那么编译期就无法判断这是父类,此时就会报错.
作者: 15369308090    时间: 2017-4-17 23:34
fansilek 发表于 2017-4-16 15:20
单独一句话看不懂 最好能有上下文


子父类重写,如果子类重写了父类的方法,必须要走子类的重写吧,
当创建子类对象的时候,重写的方法被子类调用,但调用前要看返回值类型,因为方法规则是编译期看父类,如果返回值类型大于父类那么编译期就无法判断这是父类,此时就会报错.
作者: 百無禁忌    时间: 2019-9-26 16:16
class A{}
class B extends A{}

abstract class Animal
{
        String name;
        public Animal() {
               
        }
        public Animal(String name) {
                this.name=name;
        }
       
        abstract A run();
}
class Dog extends Animal
{

        @Override
        public B run() {
               
                return new B();                               
        }
       
}

B 是A 的子类
Dog类是Animal的子类,Dog类继承了Animal类以后要实现其父类的抽象方法run();父类抽象方法中run()的返回值类型时A类的,所以子类Dog在实现父类的run()方法时,返回值要小于等于父类的返回值类型,即可以是A类的对象,也可以是A子类的对象,比如B类的对象;
作者: xiaowang66    时间: 2019-9-26 20:25
加油呀




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2