Java中this和super

一.this

this是自身的一个对象,代表对象本身,可以理解为指向对象本身的一个指针。

this的用法在java中大体分为以下3种:

1.普通的直接引用,this相当于是指向当前对象本身。

2.形参与成员名字重名,用this来区分。

class Person { 
    private int age = 10;
    public Person(){
    System.out.println("初始化年龄:"+age);
}
    public int GetAge(int age){
        this.age = age;
        return this.age;
    } 
} 
 
public class test1 { 
    public static void main(String[] args) { 
        Person Harry = new Person();
        System.out.println("Harry's age is "+Harry.GetAge(12));
    } 
}        

3.引用构造函数

class Person{

String name;
int age;

public Person(){
System.out.println("1. public Person()");
}

public Person(String name, int age){

// 调用本类中无参构造方法
this();
this.name = name;
this.age = age;
System.out.println("2. public Person(String name,int age)");
}
}



二.Super

super可以理解为是指向自己父类对象的一个指针,而这个超类指的是离自己最近的一个父类。

Super的三种用法:

1.普通引用

与this类似,super相当于是指向当前对象的父类,这样就可以用super.xxx来引用父类的成员。

2.子类中的成员变量或方法与父类中的成员变量或方法同名

class Country {
    String name;
    void value() {
       name = "China";
    }
}
  
class City extends Country {
    String name;
    void value() {
    name = "Shanghai";
    super.value();      //调用父类的方法
    System.out.println(name);
    System.out.println(super.name);
    }
  
    public static void main(String[] args) {
       City c=new City();
       c.value();
       }
}

3.调用父类中的某一个构造函数

class Person {  
    public static void prt(String s) {  
       System.out.println(s);  
    }  
   
    Person() {  
       prt("父类·无参数构造方法: "+"A Person.");  
    }//构造方法(1)  
    
    Person(String name) {  
       prt("父类·含一个参数的构造方法: "+"A person's name is " + name);  
    }//构造方法(2)  
}  
    
public class Chinese extends Person {  
    Chinese() {  
       super(); // 调用父类构造方法(1)  
       prt("子类·调用父类”无参数构造方法“: "+"A chinese coder.");  
    }  
    
    Chinese(String name) {  
       super(name);// 调用父类具有相同形参的构造方法(2)  
       prt("子类·调用父类”含一个参数的构造方法“: "+"his name is " + name);  
    }  
    
    Chinese(String name, int age) {  
       this(name);// 调用具有相同形参的构造方法(3)  
       prt("子类:调用子类具有相同形参的构造方法:his age is " + age);  
    }  
    
    public static void main(String[] args) {  
       Chinese cn = new Chinese();  
       cn = new Chinese("codersai");  
       cn = new Chinese("codersai", 18);  
    }  
}

输出

运行结果:
父类·无参数构造方法: A Person.
子类·调用父类”无参数构造方法“: A chinese coder.
父类·含一个参数的构造方法: A person’s name is codersai
子类·调用父类”含一个参数的构造方法“: his name is codersai
父类·含一个参数的构造方法: A person’s name is codersai
子类·调用父类”含一个参数的构造方法“: his name is codersai
子类:调用子类具有相同形参的构造方法:his age is 18

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值