Java的this和super总结

内容:

1、this和super作用

2、继承关系图

1、this和super作用

this和super的作用:

  • this:区分本类中的成员变量和局部变量同名的情况,代指本类
  • super:区分子类中的成员变量和父类中的成员变量,代指父类

this和super调用普通成员与构造方法:

 1 // 调用普通成员:
 2 this.成员变量       可以访问本类对象的成员变量
 3 super.成员变量     可以访问父类对象的成员变量
 4 
 5 this.成员方法()     可以访问本类对象的成员方法
 6 super.成员方法()    可以访问父类对象的成员方法
 7 
 8 使用this找本类,如果子类没有找父类
 9 使用super找父类,如果父类没有不会去找子类
10 
11 // 调用构造方法: 
12 this(其他参数)      可以访问本类其他的构造方法
13 super(其他参数)    可以访问父类其他的构造方法
14 
15 // 默认子类调用父类构造方法:
16 子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super();

this调用构造方法:

 1 public class Person {
 2     private int age;
 3     public Person(){
 4         this(15);//这句话调用 下面带int参数构造
 5     }
 6     public Person(int age){
 7         this.age = age;
 8     }
 9     public int getAge() {
10         return age;
11     }
12     public void setAge(int age) {
13         this.age = age;
14     }
15 }
16 /*
17  *  this调用本类中的其他构造方法
18  *  注意:this()语句形式必须写在构造方法的第一行
19  */
20 public class Test {
21     public static void main(String[] args) {
22         Person p = new Person();
23         int a = p.getAge();
24         System.out.println(a);
25     }
26 }

super调用构造方法:

 1 // 注:子类的每个构造方法中均有默认的super(),调用父类的空参构造
 2 public class Fu {
 3         int a;
 4     public Fu(){
 5         System.out.println("父类的构造方法");
 6     }
 7    public Fu(int a){
 8         this.a = a;
 9     }
10 
11 }
12 
13 public class Zi extends Fu{
14     public Zi(){
15            super(666); 
16            System.out.println("子类的构造方法");
17     }
18 }
19 public class Test {
20     public static void main(String[] args) {
21         new Zi();  // 匿名对象
22    }
23 }

2、继承关系图

 1 //定义父类
 2 public class Person {
 3     private String name;
 4     private int age;
 5 
 6     public Person(){}
 7     public Person(String name,int age) {
 8         this.name = name;
 9         this.age = age;
10     }
11     // get/set方法
12 }
13 
14 //定义子类
15 public class Chinese extends Person{
16     private String address;
17     public Chinese(){}
18     public Chinese(String name,int age,String address) {
19         super(name,age);
20         this.address = address;
21   }
22     // 对address的get/set
23 }
24 
25 
26 //定义测试类,使用子类创建对象
27 public class Test{
28     Chinese c = new Chinese(“AngelaBaby”,18,”北京海淀区上地软件园”);
29 }

原文地址:https://www.cnblogs.com/wyb666/p/10299219.html