黑马程序员技术交流社区

标题: super和this是否可以同时存在于同一个构造方法中? [打印本页]

作者: wwwjaycn0717    时间: 2016-7-26 00:08
标题: super和this是否可以同时存在于同一个构造方法中?
我见构造方法中有用的,但答案是不能,怎么理解呢
作者: 觅离    时间: 2016-7-26 13:10
this,和super不能同时放在构造方法中的第一行,必须取其一
作者: javaee王虎    时间: 2016-7-26 22:24
都必须放于第一行,你说能公用吗
作者: 1208124957    时间: 2016-7-26 23:07
不能同时放在一个方法中哦
作者: itismyhao    时间: 2016-7-26 23:17
应该是不能同时这样吧
this(变量)//或者super(变量);
你如果这样的话是完全可以的.
[AppleScript] 纯文本查看 复制代码
class Person
{
        String name;
        Person(String name)
        {
                this.name=name;
        }
        public void say()
        {
                System.out.println(name);
        }
}
class Student extends Person
{
        int age;
        Student(String name,int age)
        {
                super(name);
                this.age=age;
        }
        public void say()
        {
                System.out.println(name+" "+age);
        }

}
class Demo
{       
        public static void main(String[] args)
        {
                Student s=new Student("小明",1);
                s.say();
        }
}

作者: 纸牌屋    时间: 2016-7-26 23:18
super和this都是要放在第一行使用的,所以不能同时存在于一个构造方法中。
作者: 黑马YJM    时间: 2016-7-26 23:18
super是可以访问父类的构造方法,但是必须放在子类构造方法的第一行  ..super和this可以放在同一个构造方法中的..
作者: AlanMTuring    时间: 2016-7-26 23:43
不能    this和super只能放在构造方法的第一行   不能同时存在  你看错了
作者: 泪雨星空    时间: 2016-7-26 23:55
super关键字和this关键字是可以同时存在于同一个构造方法中,super调用方法和this调用方法不能同时存在构造方法中,但是调用属性是可以 同时存在构造方法中的.
作者: 泪雨星空    时间: 2016-7-26 23:56
泪雨星空 发表于 2016-7-26 23:55
super关键字和this关键字是可以同时存在于同一个构造方法中,super调用方法和this调用方法不能同时存在构造 ...

是否可以同时存在,主要要区分是调用的是方法还是属性;
作者: huangzhaoqing    时间: 2016-7-26 23:59
this()和super()不能同时在一个构造方法内
作者: 牧风    时间: 2016-7-26 23:59
可以的 super 调用父类的构造参数 this调用的是本类的成员时两者可以同构造函数。但是当super和this都是在调用构造函数时不能在一起使用,因为规定super  this调用构造函数必须在第一行
作者: HeiMa2Wangkunpe    时间: 2016-7-27 00:08
调用构造方法的两个语句 不能同时用   但是 调用成员可以
作者: nblity007    时间: 2016-7-27 00:30
1.子类的所有构造函数都默认调用基类的无参构造函数super()。如果有this(),或者super(x),则默认消失。

2.当子类构造器第一句为super(...),意味着它调用了基类的含参构造器,默认的super()消失。如果它又调用了this(...),参考第1点,this(...)所指构造器内必定有super()、或者super(...)、或者this(...)。此时该构造器调用了一遍以上的基类构造器,肯定不行啊

3.当子类构造器中第一句为this(...)时,意味着它调用了该类的其他构造器,参考第1点,其他构造器内第一句默认super(),或者指定super(...),此时的调用顺序为:父类构造器,被调用子类构造器,当前构造器。很清晰的初始化顺序!
可能你会问,如果子类的其他构造器第一句都是this(...)怎么解?很抱歉,构造器之间不能循环调用,也不能调用自身,所有至少存在一个子类构造器的第一句为super(?)!这也是java保证我们优先初始化父类的策略。



作者: 发现一只程序猿    时间: 2016-7-27 01:03
两者都必须放在第一行,所以只能选其一




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