Head First Java: 怎么判断你需要创建一个父类、子类、抽象类还是接口
2018-01-09 11:06
891 查看
一、引言
这是我在学习《Head First Java》(英文版)第 8 章 P227 页时候看到的总结性言论,觉得作者说的很简单易懂很不错,于是想要分享出来,以飨广大朋友。该言论是作者用来总结,如何判断自己:
什么时候需要创建一个父类?
什么时候需要创建一个子类?
什么时候该创建一个抽象类?
又是什么时候该创建一个接口?
分清楚这四个概念,也许不是那么简单。
二、英文原文
How do you know whether to make a class, a subclass, an abstract class, or an interface?1. Make a class that doesn’t extend anything (other than Object) when your new class doesn’t pass the IS-A test for any other type.
2. Make a subclass (in other words, extend a class) only when you need to make a more specific version of a class and need to override or add new behaviors.
3. Use an abstract class when you want to define a template for a group of subclasses, and you have at least some implementation code that all subclasses could use. Make the class abstract when you want to guarantee that nobody can make objects of that type.
4. Use an interface when you want to define a role that other classes can play, regardless of where those classses are in the inheritance tree.
三、中文释义
简要提炼下上述的原文意思:你如何知道自己需要创建一个(父)类、子类、抽象类或者接口呢?
1. 创建一个(父)类,当你的新类无法与其他任何类通过IS-A 测试(除了 Object 类,因为在 Java 中所有类都继承了 Object 类)
2. 创建一个子类,当你需要创建一个已经存在类的更加明确的版本的时候,此时需要你在这个子类中重写父类的方法或者添加一些新的行为
3. 创建一个抽象类,当你想要创建一组子类的模板的时候,在这个抽象类中,你至少需要实现一些该组子类通用的方法。并且关键的是,当你创建一个类为抽象类,这就意味着你不想要让这个类有任何的对象生成(仅仅用于规范一组子类的行为而已)。
4. 创建一个接口,当你需要定义一些类的某种角色的时候,无论这些类在继承树中哪个位置。
四、总结
分清(父)类、子类、抽象类和接口,关键其实就在于作者加黑强调的那么几个单词:more specific 这很明显是子类的特征
template 这当然是说的抽象类,我们当然不想要让模板有实例对象生成
role 这也是接口的特征,与继承机制相辅相成,构成了 Java 的独特的 OO 框架
认真阅读作者的这段话,真的能够领悟更深。
To be Stronger:)
相关文章推荐
- 2018/01/08JAVA 基础 / 接口与继承:[Q]:若父类Hero提供了一个有参的构造方法,但是没有提供无参的构造方法。子类应该怎么处理?
- 在java中怎么理解“用instanceof操作符判断父类对象是否为子类的一个实例”?
- java中的继承问题,类B继承A,那么构造方法需要这样写吗?这不是重复吗?还有接口与抽象类怎么实现?
- java创建一个子类对象是会调用父类的构造方法会不会创建父类
- Java中创建一个子类对象会不会创建父类对象?
- java中怎么快速找到接口或者父类的实现和子类
- HeadFirstJava——8_接口与抽象类
- 小数运算需要注意什么? 接口和抽象类 WinForm窗体上两个panel,怎么实现一个panel固定漂浮在另一个panel之上
- java创建一个子类对象是会调用父类的构造方法会不会创建父类
- 有懂discuz的吗?我需要在我自己的系统注册一个账号的时候,也把当前注册的账号放在discuz的用户里面。应该怎么做呀。需要discuz和java的接口吗?需要更改哪些东西。
- 如果一个父类有多个子类或者一个接口有多个实现的时候,Spring是如何判断该调用哪个的呢?源码分析如下
- java创建一个子类对象是会调用父类的构造方法会不会创建父类
- java方法重写的时候,一个调用父类还是子类方法的问题
- java字节流,字符流问题怎么判断一个文件要用字节流还是用字符流
- java中子类继承父类和实现接口有同名方法怎么处理
- java程序练习:尝试创建一个父类,在父类中创建两个方法,在子类中覆盖第二个方法,为子类创建一个对象,将他向上转型到基类并调用这个方法。
- 【Head First Java 读书笔记】(八)接口与抽象类
- java怎么还是那么渣O(∩_∩)O哈哈~父类与子类关系怎么那么复杂
- Head First C# 中文版 图文皆译 第七章 接口和抽象类 page268