JAVA语言特性 THIS SUPER 案例

THIS 在父类中源码级别只能调用 父类中的 抽象方法或者普通方法, 但是存在 THIS的父类方法调用者为子类时, THIS指向的方法为子类覆盖过的, 注意的是, 属性仍然使用父类的

这样做直观的意义在于, 父类中可以 类似 facade模式, 把 DO_STH() { DO_A DO_B DO_C } 封装,  子类在根绝各自的功能 确认要不要覆盖或者实现 DO_A DO_B DO_C

至于 THIS 执行的属性为什么还用父类的, 不是很理解, 可能是编译的时候好编译点


SUPER 在父类方法中出现时(假设 方法A), 子类在调用 super.A() 时, A 方法里面出现的 super代表 父类的父类, 而不是象上面讲的 THIS, 代表的是 子类自己覆盖的方法;

值得一提的是, THIS 不管在什么情况下, 指向的属性都是 当前类定义的,


public class PaPa {
	public String objName = "PAPA";

	public void init() {
		System.out.println(objName); // PAPA
		System.out.println("1.PAPA INIT");

		this.daemon();// SON DAEMON [this在运行时方法就跑实际覆盖的]
	}

	public void daemon() {
		System.out.println(objName);
		this.daemon();
		System.out.println("2.PAPA INIT");

	}
}


public class Father extends PaPa {

	public String objName = "FATHER";

	public void init() {
		System.out.println("1.FATHER INIT");
		
		this.daemon();
	}

	public void daemon() {
		System.out.println(objName); // FATHER
		System.out.println(super.objName); // PAPA
		super.init();// PAPA INIT
		System.out.println("2.FATHER INIT");

	}
}

public class Son extends Father {

	private String objName = "SON";

	public void init() {
		super.init();
		System.out.println("3.SON INIT");
		super.daemon();
	}

	public void daemon() {
		System.out.println(objName); // SON
		System.out.println(super.objName); // FATHER
		super.daemon(); // FATHER DAEMON
		System.out.println("4.SON DAEMON");
	}

	public static void main(String[] args) {
		Son son = new Son();

		// son.init();
		son.daemon();

	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值