Java继承

本文通过实例解析Java中子类如何直接访问父类的公有域和方法,并详细说明了当子类覆盖父类方法时的行为。同时,提供了继承设计技巧,包括将公共操作和域放在超类中、避免使用受保护域、遵循is-a关系等,旨在提高代码的可维护性和复用性。
public class Employee {
	public static String superStr = "SUPERSTR";

	public String test() {
		return "SUPERTEST";
	}

	public String test2() {
		return "SUPERTEST2";
	}
}

public class Manager extends Employee {

	public static void main(String[] args) {
		System.out.println(superStr);// 直接访问父类域
		Manager mgr = new Manager();
		String t1 = mgr.test();// 直接访问父类方法
		String t2 = mgr.test2();// 覆盖父类方法
		System.out.println(t1 + "\n" + t2);
	}


	@Override
	public String test2() {
		return super.test2() + "#test2";
	}
}
父类Employee有public的域和方法,子类Manager覆盖了父类的一个方法。从代码中的注释可清楚地知道:子类可直接访问父类的公有域或方法,但若子类覆盖了父类的域或方法,就按覆盖的本意来。
输出结果:

SUPERSTR
SUPERTEST
SUPERTEST2#test2

简单来说,上面的Manager继承Employee后,它的代码实质上等同于:

public class Manager extends Employee {
	//***********父类域**************************
	public static String superStr = "SUPERSTR";

	public String test() {
		return "SUPERTEST";
	}

	/*public String test2() {
		return "SUPERTEST2";
	}*/
	//***********父类域**************************
	public static void main(String[] args) {
		System.out.println(superStr);// 直接访问父类域
		Manager mgr = new Manager();
		String t1 = mgr.test();// 直接访问父类方法
		String t2 = mgr.test2();// 覆盖父类方法
		System.out.println(t1 + "\n" + t2);
	}

	@Override
	public String test2() {
		return super.test2() + "#test2";
	}
}

继承设计技巧:

1)将公共操作和域放置在超类

2)不要使用受保护的域(protected)

3)使用继承实现"is-a"关系

4)除非所有继承的方法都有意义,否则不要使用继承

5)在覆盖方法的时候,不要改变预期的行为

6)使用多态,而非类型信息

7)不要过多地使用反射

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzyjr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值