儿子与父亲断绝关系:继承和抽象
来源:互联网 发布:网络搜索鬼片 编辑:程序博客网 时间: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已经断绝父子关系了,故事讲诉完毕。
- 儿子与父亲断绝关系:继承和抽象
- 黄子韬父亲要求儿子与SM解约
- 继承、抽象类和接口的特点与关系
- 抽象类与接口之间的继承和实现关系
- 抽象类,接口继承与实现关系
- java抽象类和继承关系
- java抽象类和继承关系
- 【父亲与儿子的约会】若干年前,有…
- java线程间父亲和儿子相互同步切换
- 一个父亲和儿子的故事 并查集相关内容
- java抽象类和接口和继承之间关系
- java抽象类和接口和继承之间关系
- java抽象类和接口和继承之间关系
- Java抽象类和接口和继承之间关系
- Java抽象类和接口和继承之间关系
- 儿子需要这样的父亲
- 父亲给儿子的一封信
- 继承,抽象,接口之间的关系和区别
- Mac上的包管理器Homebrew的介绍及安装和使用实践
- 什么是内部类?Static Nested Class 和 Inner Class的不同。
- hdu 1002 java
- 如何在对话框中创建工具栏CToolBar
- Mysql常用命令
- 儿子与父亲断绝关系:继承和抽象
- Mac 下终端命令行之基本命令总结(持续更新)
- 类适配器和对象适配器
- super.getClass()方法调用
- yii ajax渲染页面
- UVa 120 Stacks of Flapjacks (STL deque&reverse)
- Mysql常用函数
- C++的XML编程经验――LIBXML2库使用指南
- sleep() 和 wait() 有什么区别?