注册 登录
编程论坛 JAVA论坛

大家帮我看一下,在super()函数前加this()编译都不能通过,去掉this()就没问题,为什么呢?

情丨调 发布于 2015-11-07 21:04, 1811 次点击
只有本站会员才能查看附件,请 登录



下面是源代码,大家可以跑得看一下 ,谢谢

package TestDemo;

class Person{

String name;

int age;

String address;

Person(){

System.out.println("我是父类无参构造方法。");

}

Person(int age,String name,String address){

this.age=age;

this.name=name;

this.address=address;

System.out.println("我是父类有参构造方法。");

}

void tell(){

System.out.println("我是父类的tell方法。");

}

}

class Student extends Person{

int score;

Student(){

System.out.println("我是子类无参构造方法。");

}

Student(int age,String name,String address,int score){

this();

super(age,name,address);

super.tell();

System.out.println("我是子类有参构造方法");

System.out.println("大家好,我叫"+name+",我今年"+age+"岁,家住"+address+",今天考试我考了"+score+"分!");

}

}

public class Test02 {

public static void main(String[] args) {

new Student();

new Student(20,"张三","北京",100);

}

}




8 回复
#2
情丨调2015-11-07 21:05
最近在看super和this关键字,有点混乱
#3
情丨调2015-11-07 21:07
我觉得这样写是没有问题的,那么问题到底出在哪里呢
#4
林月儿2015-11-09 11:13
程序代码:
class Person{

    String name;

    int age;

    String address;

    Person(){

        System.out.println("我是父类无参构造方法。");

    }

    Person(int age,String name,String address){

        this.age=age;

        this.name=name;

        this.address=address;

        System.out.println("我是父类有参构造方法。");

    }

    void tell(){

        System.out.println("我是父类的tell方法。");

    }

}

class Student extends Person{

    int score;

    Student(){
        super(21,"张无忌","湖南");
        System.out.println("我是子类无参构造方法。");

    }

    Student(int age,String name,String address,int score){

        this();
        super.tell();

        System.out.println("我是子类有参构造方法");

        System.out.println("大家好,我叫"+name+",我今年"+age+"岁,家住"+address+",今天考试我考了"+score+"分!");

    }
   

}

public class Test02 {

    public static void main(String[] args) {

        new Student();

        new Student(20,"张三","北京",100);

    }

}

关键字滥用,注意一点即可
this和super都是放在除注释以外的首行
#5
情丨调2015-11-09 13:38
回复 4楼 林月儿
先表示感谢,其实这一点我之前有怀疑过,
那现在如果我确实需要同时用“子类的有参构造方法”调用“子类的无参构造方法”和“父类的有参构造方法”的话,代码怎么写呢?
#6
林月儿2015-11-09 14:03
那现在如果我确实需要同时用“子类的有参构造方法”调用“子类的无参构造方法”和“父类的有参构造方法”的话,代码怎么写呢?
在注意我说的关键字置于首行的关键点外
可以通过构造器之间的重载调用来避免我说的注意点
比如调用单参分化任务
程序代码:
Student (int age){
        this();
    }
    Student(){
        this(22,"林月","湖南",88);
    }
    Student(int age,String name,String address,int score){
       super(21,"张无忌","湖南");
    }
#7
wcao7772015-11-25 14:50
super要放在第一位置
#8
GrayJerry2015-11-25 15:37
super是指向父类的引用,必须放在第一行
#9
java彦祖2016-01-05 00:29
this()和Super()不能同时出现,因为他们都要位于第一行
1