对super调用必须是构造函数中第一个语句?

时间:2023-01-19 15:40:15
class Person
{
private String name;
private int age;
public void setPerson(String name,int age)
{
this.name=name;
this.age=age;
}
public void show()
{
System.out.println(name);
System.out.println(age);
}
}

class student extends Person
{
private int math,english;
public void Student(String name,int age,int m,int e)
{
super(name,age);
math=m;
english=e;
}
public void show()
{
System.out.println("name="+name);
System.out.println("age="+age);
System.out.println("math"+math);
System.out.println("english"+english);
}
public int total()
{
int total;
return total=math+english;
}
public void main(String[] args)
{
student s=new student();
s.Student("李四",18,70,85);
System.out.println("姓名:"+name+"年龄:"+age);
System.out.println("得分 数学:"+math+" 英语:"+english);
System.out.println("总分:"+total());
}
}
对super调用必须是构造函数中第一个语句?super()应该怎么改

3 个解决方案

#1




开始--->
父类的静态代码--->
子类的静态代码-->
父类的非静态代码--->
父类构造函数--->
子类非静态代码--->
子类构造函数--->完成

子类的构造函数的调用必须先完成父类的调用,这是系统初始化特性,所以super必须在构造方法中的第一句
如果父类的不存在“有参构造方法”,此时写不写super无所谓,子类构造方法一定会调用super(),
如果父类的 存在“有参构造方法”,此时必须指定是哪一个父类的构造方法



#2





class Person {
    public String name;
    public int age;

    public void setPerson(String name, int age) {
this.name = name;
this.age = age;
    }

    public void show() {
System.out.println(name);
System.out.println(age);
    }
}

public class Student extends Person {
    private int math, english;

    public void Student(String name, int age, int m, int e) {
setPerson(name,age);
math = m;
english = e;
    }

    public void show() {
System.out.println("name=" + name);
System.out.println("age=" + age);
System.out.println("math" + math);
System.out.println("english" + english);
    }

    public int total() {
int total;
return total = math + english;
    }

    public static void main(String[] args) {
Student s = new Student();
s.Student("李四", 18, 70, 85);
System.out.println("姓名:" + s.name + "年龄:" + s.age);
System.out.println("得分 数学:" + s.math + " 英语:" + s.english);
System.out.println("总分:" + s.total());
    }
}


#3


但是这道题是规定person类中两个成员属性为私有属性,如果不用super()没有办法调用父类的两个成员

#1




开始--->
父类的静态代码--->
子类的静态代码-->
父类的非静态代码--->
父类构造函数--->
子类非静态代码--->
子类构造函数--->完成

子类的构造函数的调用必须先完成父类的调用,这是系统初始化特性,所以super必须在构造方法中的第一句
如果父类的不存在“有参构造方法”,此时写不写super无所谓,子类构造方法一定会调用super(),
如果父类的 存在“有参构造方法”,此时必须指定是哪一个父类的构造方法



#2





class Person {
    public String name;
    public int age;

    public void setPerson(String name, int age) {
this.name = name;
this.age = age;
    }

    public void show() {
System.out.println(name);
System.out.println(age);
    }
}

public class Student extends Person {
    private int math, english;

    public void Student(String name, int age, int m, int e) {
setPerson(name,age);
math = m;
english = e;
    }

    public void show() {
System.out.println("name=" + name);
System.out.println("age=" + age);
System.out.println("math" + math);
System.out.println("english" + english);
    }

    public int total() {
int total;
return total = math + english;
    }

    public static void main(String[] args) {
Student s = new Student();
s.Student("李四", 18, 70, 85);
System.out.println("姓名:" + s.name + "年龄:" + s.age);
System.out.println("得分 数学:" + s.math + " 英语:" + s.english);
System.out.println("总分:" + s.total());
    }
}


#3


但是这道题是规定person类中两个成员属性为私有属性,如果不用super()没有办法调用父类的两个成员