子类通过super调用父类的构造方法
每一个子类的构造方法都回默认会调用父类的无参构造方法
package no2;
class Person{
String name;
int id;
Person(){
System.out.println("aaa");
}
Person(String name,int id){
this.name = name;
this.id = id;
}
}
class Stu extends Person{
Stu(){
//这里会自动加上super,子类不会继承父类构造函数,但是在无参构造中会自动加上super()来调用
//父类的无参构造函数,所以加不加super都回执行父类无参中的输出aaa
}
Stu(String name,int id){
super(name,id);//调用父类的构造,要传参数,假若没有参数,就会传给父类的无参构造中去
}
}
public class Main {
public static void main(String[] args){
Stu s = new Stu("ad",323);
System.out.println(s.name+s.id);
}
}
子类重写了父类方法之后,通过this.方法,不会调用父类的方法,只会调用子类重写之后的方法,如下代码:
package no2;
class A{
public A(){
this.print();//执行的是子类的函数,因为子类函数重写了方法、假设子类不重写,那么这里会执行父类的函数
System.out.println("父类无参构造");
}
public void print(){
System.out.println("父类函数");
}
}
class B extends A{
private int num = 100;
public B(int num){
//super();默认都回调用父类的无参构造
this.num = num;
}
public void print(){
System.out.println("子类函数"+this.num);//num输出为0,num此时 还是默认值
}
}
public class Main {
public static void main(String[] args){
new B(3);
}
}