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语句指定要访问的构造方法