Java —— super与this关键字的用法与区别

介绍

  • this:当前对象
  • super:直接父类对象
  • this():当前类的无参构造方法,也可以指定有参的如:this(a)
  • super():直接父类的无参构造方法,也可以指定有参的如:super(a)

注意

1,当在方法内调用一个变量b,编译器会向上遍历,直到找到最近的一个引用变量为止:b—>this.b—>super.b,如果未找到,编译器将显式提示错误信息;

2,当变量b的定义只发生在父类时,此时  b=this.b=super.b;

3,当局部变量b覆盖成员变量b时,使用this.b调用成员变量,此时的成员变量包括子类新增和继承的变量,不包含隐藏变量;

4,当子类成员变量b覆盖父类成员变量b时,使用super.b调用这个被隐藏的成员变量;

5,当子类重写了父类方法method(),可以使用super.method()来调用父类被隐藏的方法;

6,super()与this()具备硬性使用条件,否则编译无法通过——Constructor call must be the first statement in a constructor.即 二者出现的位置必须是构造方法的第一行

7,super()与this()并不像super.b与this.b一样可以向下替代,因为子类并不能继承父类的构造方法,仅仅是包含了父类的有参或无参构造器(默认无参);

8,Implicit[不言明的,隐式的] super constructor Subject() is undefined. Must explicitly[明确地] invoke another constructor,这句话表明 —— 子类的构造方法中必须调用父类的构造方法,如果没有显式写出super(),则默认调用父类的无参构造方法。但此时如果父类写了有参的构造方法,编译器就不会再为父类默认创建无参构造方法,此时super()没有被定义,则必须在子类的构造方法中写明super(参数)或者在父类中显式写出父类的无参构造方法;

实例

父类

public class Subject{    
    public String a="我是父类全局变量a";  
      
    public String b="我是父类全局变量b";  
      
    public void operation(){  
        System.out.println("我是父类方法");  
    };   
    public void operation1(){  
        System.out.println("我是父类方法");  
    };   
}   

子类

public class MySubject extends Subject {    
    public String b="我是子类全局变量b";  
    @Override    
    public void operation() {    
        System.out.println(a);  
        System.out.println(this.a);  
        System.out.println(super.a);  
    }    
    @Override    
    public void operation1() {    
        String b="我是局部变量b";  
        System.out.println(b);  
        System.out.println(this.b);  
        System.out.println(super.b);  
    }    
      
    public static void main(String[] args) {  
        Subject sub=new MySubject();  
        sub.operation();    
        sub.operation1();    
          
    }   
} 

运行结果

我是父类全局变量a  
我是父类全局变量a  
我是父类全局变量a  
我是局部变量b  
我是子类全局变量b  
我是父类全局变量b

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值