儿子与父亲断绝关系:继承和抽象

如果一个类是另一个类的扩展或延伸,那么可以考虑是否可以用继承,另外还需要权衡使用继承后这个对象是否受制于父类,是否降低了灵活性。继承只是继承父类的特性而不能了解父类所有的东西,比如私有的函数、属性等。而抽象是父子间相同的问题不能达成共识的时候就需要使用了,毕竟每个人有每个人的思考方式,不能把个人的意志强加于他人身上。所以,抽象是继承的一个升级,广开言路、求同存异耳。

public class Father
{
	private String name;
	private int age;
	
	public String getName()
	{
		return name;
	}
	public void setName(String name)
	{
		this.name = name;
	}
	public int getAge()
	{
		return age;
	}
	public void setAge(int age)
	{
		this.age = age;
	}
	
	@SuppressWarnings("unused")
	private void playCard(){
		System.out.println("打牌");
	}
}
public class Son extends Father
{
	public void work(){
		System.out.println("工作");
	}


}
儿子和父亲虽然都有名字和年龄,但儿子并不知道父亲会打牌、父亲也不知道儿子能工作。如果轻率地改变父亲的私有方法那么儿子就会学会打牌了,儿子如果以打牌为乐、是不是会忘了工作呢?所以,继承也并非什么都好,子类会被父类影响那么最好慎用继承。显然,儿子可以拒绝在工作的时候玩牌,但是就需要增加工作时不能玩牌的逻辑处理了。所以,修改后的代码是这样:

public class Son extends Father
{
	public void work(){
		System.out.println("工作");
	}


	@SuppressWarnings("deprecation")
	private boolean canPlayCard(){
		Date date=new Date();
		if(date.getHours()>=9&&date.getHours()<=18){
			return false;
		}
		return true;
	}


	@Override
	public void playCard()
	{
		boolean canPlayCard=canPlayCard();
		if(canPlayCard){
			super.playCard();
		}else{
			System.out.println("工作时间不能玩牌");
		}
	}
}

这时候就可以考虑使用抽象类来实现了,不在需要使用继承受父类的影响了。

public abstract class AbstractClass
{
	private  String name;
	private  int age;
	
	public  String getName()
	{
		return name;
	}
	public   void setName(String name)
	{
		this.name = name;
	}
	public  int getAge()
	{
		return age;
	}
	public  void setAge(int age)
	{
		this.age = age;
	}


    public abstract void playCard();


}

现在Father、Son继承这个抽象类实现自己的玩牌规则就行了:

public class Father extends AbstractClass
{
	public void playCard(){
		System.out.println("打牌,没完没了的打");
	}
}


public class Son extends AbstractClass
{
	public void work(){
		System.out.println("工作");
	}
	
	public void playCard()
	{
		System.out.println("玩牌规则:工作时间不能玩牌,只能工作");
		
	}
}
以前儿子见不惯父亲只会打牌,儿子以此为耻给自己定下了打牌的规矩,从这里看出Father和Son已经断绝父子关系了,故事讲诉完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值