1.父类
public class Person { private String name = "李四"; private int age; public Person() { System.out.println("Person的构造方法执行了!"); System.out.println(this.getClass().hashCode()); } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } }
2.子类
public class Student extends Person { private double mark; private int num; private String name = "赵六"; public Student() { // 系统会默认有一个super(); super(); System.out.println("Student的构造方法执行了"); System.out.println(this.getClass().hashCode()); } public Student(double mark, int num) { // super可以用在构造函数中,为了代码的重复利用,还可以初始化从父类继承过来的属性 super("张三", 10); this.mark = mark; this.num = num; } public void study() { System.out.println(super.getName() + "在学习!"); } // ================================================================== public double getMark() { return mark; } public int getNum() { return num; } public void setMark(double mark) { this.mark = mark; } public void setNum(int num) { this.num = num; } }
3.测试类:
public class Test { public static void main(String[] args) { /** * 在创建子类对象的时候会先调用父类的构造方法 * 调用父类的构造方法仅仅是为了给继承过来的父类属性初始化而已,并不会创建父类对象! */ Student student1 = new Student(); Student student2 = new Student(100.0, 001); student2.study(); } }
在此,我也翻了很多论坛,调用构造方法并不一定会创建对象,new 的时候才一定会创建对象,,也就是构造方法的执行不一定会创建对象
super跟this不同,this是一个引用,是一个地址,而super仅仅代表父类的特征,特征,特征