java中的this,super关键字

说到this,可能大部分人知道是指代当前对象的引用,最常见的就是在构造函数中对一些基本的属性进行初始化赋值。

public class Student {
	       int id;
	       String name;
	       public Student(int id,String name){
	    	   this.id=id;
	    	   this.name=name;
	    	  }
	       public static void main(String[]Args){
		      Student ss=new Student(001,"南瓜灯");
	  	 }   
	       
        }

像这样对id,name进行初始化是 经常所用到的。除此之外,还有通过this对其他构造函数的调用:

public class Student {
	        int id;
	        String name;
	       
	       public Student(){
	    	   this(001, "南瓜灯");
                   System.out.println("无参构造函数");
        }
	       public Student(int id,String name ){
	    	   this.id=id;
	    	   this.name=name;                   
                   System.out.println("有参构造函数"); 
   	  }
	       
	  	 public static void main(String[]Args){
		      Student ss=new Student();
	  	 }   
	       
}

执行后的结果为:

有参构造函数

无参构造函数

也很好一节,this()掉=调用了另一个有参的构造函数。这里应该注意的是,在使用this()调用另一个构造函数的时候,只能把this()放在构造函数里的第一句,否则会出现Constructor call must be the first statement in a constructor的问题。

然后就是关键字super

super是直接父类对象的引用,可以通过super来访问父类中被子类覆盖的方法和属性下面举一个简单的例子说明:

class Animal {//父类Animal
	    public void eat(){ 
		 System.out.println("吃中....");
	}
}
class Bird  extends Animal{//子类Bird
	<pre name="code" class="java">    public void fly(){
               super();
		System.out.println("飞...");
	}

}public class Test { public static void main(String[]args){ Bird bd=new Bird(); bd.eat();}}
 子类Bird继承父类Animal,说到现在好像还没看到要说的重点,其实在父类的eat()方法与子类的fly方法中,隐含有一个方法,叫做super.即实际在eat方法中,应该是这样的: 

public void eat(){ 
                 super();//隐含的
		 System.out.println("吃中....");
	}
子类fly()方法中,应该是这样的:

public void fly(){
               super();//隐含的
		System.out.println("飞...");
}
当然两个super()所指向的不同,父类super()指向的为Object,子类BIrd指向的为父类的 Animal

而且实际两个方法看似是空的,没有参数,实际也有默认的参数,就是我们这里所说的this,supe

public void eat(this,super){}
public void fly(this,super){}
当然了我们不能把默认的this与super手动加上。说到这些,我们就可以看看上面整段代码在底层的运行效果:

先new一个Bird,然后执行到super()的时候,调用父类,一直向上,直到到Object,看过这图应该对执行的顺序有了一个清醒的认识

然后换一个图的方式:

可以看出子类对父类是一种包含关系,好了,说到这里,相信对this以及super有了一些认识吧

















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值