关于JAVA的this和super

 

1 在生成子类对象的时候会生成一个隐式的父类对象(不管父类对象是抽象还是具体),这个对象是在虚拟机中生成的相当于不可见(如果不生成父类对象,不对父类进行初始化,之类就无法调用父类属性)。

 

2  this指代对当前对象的引用这个没有问题,但是super,很多人说不能把super当做父类对象的引用,但是本质上,this和super都是一样的,都是对象的引用。区别在于,super引用的父类对象是在java虚拟机中隐式生成的,所以又不能把super当做对象的引用。

3 生成子类对象,如果没有显式的使用super调用父类构造函数,虚拟机也会替你调用的,因为如果不调用,父类就无法初始化,子类就不能正常调用父类字段和方法。

4 生成子类对象,实际上进行了两次初始化,调用两次构造函数,第一次,调用父类构造函数初始化隐式的父类对象,第二次调用,调用父类构造函数初始化子类。

5 而在子类的普通方法中使用super,只是相当于把父类的方法调到子类中执行。

package Test3;

import org.omg.CORBA.PUBLIC_MEMBER;

class A{
	public A()
	{
		System.out.println(this.getClass().getName());
	}
	public String method(){
		return this.getClass().getName();
	}
}
public class B extends A{
	//生成B对象的时候,初始化B会调用A的构造函数来初始化B,同时也会生成隐式的A的对象,隐式的调用A的构造函数。
	
	public String method(){
		//把父类的方法调用到这里,不过是只在子类对象中执行,
		//而生成对象的时候构造函数会同时在父类和子类对象中执行,但是
		//父类中的构造函数的执行是不可见的
		System.out.println("我在这");
		return super.method();
		
	}
	public static void main(String args[]){
		B b=new B();//在生成子类对象的时候会生成隐式的父类对象,不可见。
		System.out.println(b.method());
		
		
	}
		
	}
执行结果:
Test3.B
我在这
Test3.B

以上理解如果有错误,请指出,谢谢了。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值