黑马程序员技术交流社区

标题: 为什么要用supper语句 [打印本页]

作者: huangxuanheng    时间: 2014-8-6 21:12
标题: 为什么要用supper语句
本帖最后由 huangxuanheng 于 2014-8-7 21:53 编辑

有时候在编写代码,总发现很多人在继承某个类时,总喜欢调用supper,但我不用supper也能同样达到一样的效果,但是为什么大家都喜欢使用supper呢?

作者: aiq黑马程序员    时间: 2014-8-6 21:13
你不用supper你是怎么做到的?   用supper你不感觉简单明了么?
作者: fantacyleo    时间: 2014-8-6 21:21
举个例子。。。
作者: huangxuanheng    时间: 2014-8-6 21:25
aiq黑马程序员 发表于 2014-8-6 21:13
你不用supper你是怎么做到的?   用supper你不感觉简单明了么?

我在做简单的控件事件时,就不用supper啊,但视频中确实用了supper,但做出的效果是一样的
作者: 侯岩卿    时间: 2014-8-6 21:49

子类一定要访问父类中的构造函数,因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的,所以子类在对象初始化时 ,要先访问一下父类中的构造函数! 子类的所有的构造函数,默认都会访问父类中空参数的构造函数。即子类每一个构造函数内的第一行都有一句隐式super(), 所以写不写没有区别!但是当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问父类中的构造函数,否则会编译失败。

QQ截图20140806214512.png (76.92 KB, 下载次数: 26)

QQ截图20140806214512.png

作者: masai158    时间: 2014-8-7 00:51
supper???还是 super
作者: justin1258    时间: 2014-8-7 09:40
super和this有个最本质的区别,super是静态绑定的,不具有多态性。
作者: zhxu188    时间: 2014-8-7 09:53
用supper有时候能更简便一些
作者: star5603    时间: 2014-8-7 10:00
zhxu188 发表于 2014-8-7 09:53
用supper有时候能更简便一些

为什么都写supper。。。不是super么。。。
作者: zhxu188    时间: 2014-8-7 10:04
star5603 发表于 2014-8-7 10:00
为什么都写supper。。。不是super么。。。

好吧,被误导了....
作者: ssy1939    时间: 2014-8-7 14:58
貌似supper 指得是父类,   实际还是用的super  ,没搞懂楼主的意思,  有代码 有真相,不放代码,看个甚
作者: liqi    时间: 2014-8-7 15:12
有些地方不写,是有默认的。
作者: GoodBoy123    时间: 2014-8-7 15:16
多了个屁,哦不对,是p
作者: shuimu_88    时间: 2014-8-7 17:50
supper是调用继承的父类中的方法,成员变量,用了super就可以在子类中创建新方法的部分功能与父类中的一样时,直接调用,而不用复写
作者: 新语新空    时间: 2014-8-7 18:02
即使不显示调用super,编译器也会默认一个空参数的super语句,另外,既然实现相同的功能,用super可以提高代码的重用性。
作者: 王洪涛    时间: 2014-8-7 18:33
用super不是代码简洁明了吗
作者: 光头强    时间: 2014-8-7 18:49
因为会有隐式默认的super去访问父类
作者: 幺零夭夭    时间: 2014-8-7 18:53
继承中super和this是相对的,this是经常用的,super我也不是经常见到,更很少用了,就当当学习时学到了。
作者: 柀堓椛開    时间: 2014-8-7 18:54
你不写supper();   程序默认给你加上
作者: 龙帅    时间: 2014-8-7 19:38
会默认给你加上的
作者: lspooooo    时间: 2014-8-7 20:35
用super简单明了一点吧
作者: huangxuanheng    时间: 2014-8-7 21:41
lspooooo 发表于 2014-8-7 20:35
用super简单明了一点吧

我觉得不用也很明了啊
作者: 姜佳文    时间: 2014-8-7 21:50
加不加都行,虽然你没写,但是系统默认在第一行加一条super();语句的
作者: Justfeeling    时间: 2014-8-7 22:28
四楼正解
*                 因为子类的构造函数默认第一行有一条隐式的语句super();
*                 super会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super;                       
*
*/
class Test3{
        public static void main(String[] args) {
                Zi z=new Zi();
        }
}
class Fu{       
        Fu(){
                System.out.println("Fu run!");
        }
}
class Zi extends Fu{       
        Zi(){
                System.out.println("Zi run!");
        }
}

//结果为:Fu run!
          Zi run!







作者: conglin1991    时间: 2014-8-7 23:42
就跟吃饭要用碗差不多一个道理
作者: 柠萌不    时间: 2014-8-7 23:48
有的是默认就有的...
作者: 陈云阳    时间: 2014-8-7 23:50
zhxu188 发表于 2014-8-7 10:04
好吧,被误导了....

这都能被误导。 黑马币 -5
作者: alvinbx    时间: 2014-8-8 00:04
因为有些功能父类定义了,子类直接用super引用父类写好的方法就可以了。 有时是子类的构造方法需要访问父类,因为它需要知道父类的构造方法给继承过来的变量赋了什么值等原因不得不用super。




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