super和this关键字的具体应用

2022-11-15 14:56:19 浏览数 (2)

super和this关键字的具体应用

目录

super和this关键字的具体应用

下面通过四组Child类和Test类代码,来体现super和this关键字的具体应用

一、子类默认调用父类无参构造方法

二、子类无参构造方法中默认调用父类无参构造方法

三、子类有参构造方法中默认调用父类无参构造方法

四、子类通过this()调用自己的无参构造函数


一共有三个类

  • Person(父类)
  • Child(子类)
  • Test(实例化)

Person类(代码不变)如下:

代码语言:javascript复制
public class Person {
	private String name;
	
	public Person(){
		System.out.println("one person");
	}
	public Person(String name){
		this.name=name;
		System.out.println("one person,设置了人名");
	}
	public int Person( int i){
		return i;
	}
}

方法重载的意思是一个类中可以有多个方法具有相同的名字,即使方法类型不同,这些方法的参数必须不同,即参数的个数不同,或者参数的类型不同。

Person类对构造方法进行了重载

下面通过四组Child类和Test类代码,来体现super和this关键字的具体应用

一、子类默认调用父类无参构造方法

代码语言:javascript复制
public class Child extends Person{
}

Child类中默认有一个父类(Person)的无参构造方法

代码语言:javascript复制
public class Test {
	public static void main(String args[]){
	Child child =new Child();
	}
}

运行结果为:

one person

二、子类无参构造方法中默认调用父类无参构造方法

代码语言:javascript复制
public class Child extends Person{
	public Child(){
		//super();
		System.out.println("a child");
	}
}

子类每一个构造方法的第一行都有一条默认的语句super();

代码语言:javascript复制
public class Test {
	public static void main(String args[]){
	Child child =new Child();
	}
}

上面Child类中如果不加super();语句,系统也会默认加上,运行结果都为:

one person a child

三、子类有参构造方法中默认调用父类无参构造方法

代码语言:javascript复制
class Child extends Person{
	private String hobby;
	public Child(String hobby){
	    //super();
		this.hobby=hobby;
		System.out.println("子类的爱好" hobby);
	}
}
代码语言:javascript复制
public class Test {
	public static void main(String args[]){
	Child childone =new Child("篮球");
	}
}

上面Child类中如果不加super();语句,系统也会默认加上,运行结果都为:

one person 子类的爱好篮球

四、子类通过this()调用自己的无参构造函数

代码语言:javascript复制
class Child extends Person{
	private String hobby;
	public Child(String hobby){
	//	super();
		this();					//调用自己的构造函数,super()和this()不能同时使用
		this.hobby=hobby;
		System.out.println("子类的爱好" hobby);
	}
	public Child(){
		super();
		System.out.println("a child");
	}
}
代码语言:javascript复制
public class Test {
	public static void main(String args[]){
	Child childone =new Child("篮球");
	}
}

  • 上面Child类中构造函数如果不加super();语句,系统也会默认加上
  • this();语句调用自己的构造函数
  • 但是super()和this()不能同时使用

Child类中不加this();语句运行结果为:

one person 子类的爱好篮球

Child类中加上this();语句运行结果为:

one person a child 子类的爱好篮球

注意:

当父类中没有空参数的构造方法时,子类的构造方法必须通过this或者super语句指定要访问的构造方法

0 人点赞