文章目录
一.super和this
举例1:
public class SuperTest01 {
public static void main(String[] args) {
new B();
}
}
class A{
public A(){
System.out.println("A的构造方法");
}
}
class B extends A{
public B() {
System.out.println("B的构造方法");
}
}
结果:
该程序中有默认的super()方法,但是不显示。
public class SuperTest01 {
public static void main(String[] args) {
new B();
}
}
class A extends Object{
public A(){
super();//此处也有super(),因为A类会继承Object类
System.out.println("A的构造方法");
}
}
class B extends A{
public B() {
super();//我们可以写出来,不写也是默认无参数super();
System.out.println("B的构造方法");
}
}
举例2:
public class SuperTest01 {
public static void main(String[] args) {
new B();
}
}
class A{
public A(){
System.out.println("A的无参构造方法");
}
public A(int i) {
System.out.println(i+"A的有参构造方法");
}
}
class B extends A{
public B() {
super(123);
System.out.println("B的无参构造方法");
}
}
当我们在程序中手动添加super(参数列表,可以没有)时,默认的super()就不存在。
二.综合案例
public class SuperTet02 {
public static void main(String[] args){
new C();
}
}
class A1{
public A1() {
//super();
System.out.println("1");
}
}
class B1 extends A1{
public B1() {
//super();
System.out.println("2");
}
public B1(String name) {
//super();
System.out.println("3");
}
}
class C extends B1{
public C() {
this("zhangsan");//没有super()
System.out.println("4");
}
public C(String name) {
this(name, 20);
System.out.println("5");
}
public C(String name, int age) {
//super();
System.out.println("6");
}
}
首先创建C类无参的对象,进入C类,发现this("“zhangsan”),接着调用 C(String name),发现this(name, 20);接着调用 C(String name, int age),接着调用super(),因为C的父类为B1,所以进入B1的无参构造函数,调用super(),因为B1的父类为A1,所以进入A1的无参构造函数,接着调用super(),指向了Object,然后执行第二行System.out.println(“1”);输出1,结束后退出A类的函数,进入B类,输出2,结束进入public C(String name, int age) ,输出6,同理依次输出5,输出4.
最近笔者也在运营公众号,欢迎大家的关注!我们一起学习Java,一起进步。