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

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

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;}@Overridepublic 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已经断绝父子关系了,故事讲诉完毕。

原创粉丝点击