Java学习:十四.super初步

一.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,一起进步。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45965358/article/details/113869566