第七周 抽象与接口
在第一周就有一个Shape类的例子。这个类有很多的子类,每个子类也都实现了父类的方法。实际上父类Shape只是一个抽象的概念而并没有实际的意义。
举例案例理解
如果请你画一个圆,你知道该怎么画;如果请你画一个矩形,你也知道该怎么画。但是如果我说:“请画一个形状,句号”。你该怎么画?同样,我们可以定义Circle类和Rectangle类的draw(),但是Shape类的draw()呢?
Shape类表达的是一种概念,一种共同属性的抽象集合,我们并不希望任何Shape类的对象会被创建出来。
那么,我们就应该把这个Shape类定义为抽象的。我们用abstract关键字来定义抽象类。抽象类的作用仅仅是表达接口,而不是具体的实现细节。抽象类中可以存在抽象方法。抽象方法也是使用abstract关键字来修饰。
注意: 抽象的方法是不完全的,它只是一个方法签名而完全没有方法体。
public abstract class Shape {
public abstract void draw(Graphics g);
abstract void move(Graphics g);
}
如果一个类有了一个抽象的方法,这个类就必须声明为抽象类。
如果父类是抽象类,那么子类必须覆盖所有在父类中的抽象方法,否则子类也成为一个抽象类。一个抽象类可以没有任何抽象方法,所有的方法都有方法体,但是整个类是抽象的。设计这样的抽象类主要是为了防止制造它的对象出来。
抽象
abstract
抽象函数/抽象类
- 抽象函数 -- 表达概念而无法实现具体代码的函数
- 抽象类 -- 表达概念而无法构造出实体的类
接口
Java把抽象的概念又更推进了一步。这就是接口(Interface)。
接口其实就是完全抽象的类,因此接口和类的地位是一样的,此前所有针对类的所有法则同样适用于接口。
接口所有的方法都是没有方法体的,而且都是public abstract,即使你没有这样声明。而接口中的所有成员变量都是public static final的变量,
并且必须有定义初始化,因为所有变量都必须在编译的时候有确定值。
接口和类的地位是一样的。因此我们可以看到其定义方式跟类也是基本上一样的。当然,其中的所有方法都没有方法体。而当类从接口得到继承的时候,
Java用另外一个动词:实现(implements)。当然,实现接口的类必须覆盖接口中所有的方法,否则这个类就成为一个抽象类。
Java不允许多继承,但是允许一个类实现多个接口,也允许一个接口从多个接口得到继承,但是不允许接口从类继承。
- 接口是纯抽象类
- 所有的成员函数都是抽象函数
- 所有的成员变量都是public static final
- 接口规定了长什么样, 但是不管里面有什么
接口设计模式
示例二
数据与表现分离: 细胞自动机
- 程序的业务逻辑与表现无关
- 表现可以是图形的也可以是文本的
- 表现可以是当地的也可以是远程的
View和Field的关系
责任驱动的设计
GUI: 网格化
最后运行结果:
细胞自动机.png源代码下载地址:
https://github.com/menglanyingfei/MOOC_Wengkai_Java/tree/master/code/cell_machine/src
写在最后:
- 写这篇博客时听的歌曲
http://music.163.com/#/song?id=21312101 - 写作时间
2017/07/19
22:50:00 - 博客链接
欢迎访问我的主页
http://blog.csdn.net/menglanyingfei?viewmode=contents - 一些感慨
最近一段时间, 突然发现了: 在文学上, 这句话很经典 ,
悲剧就是把美好的东西毁灭给人看. -- 鲁迅
生活中, 有各种开心与悲伤, 其实, 在人内心深处是有一种对美好事物的向往,
由于它的存在, 才产生了各种目标与信念. 但人真是一种奇怪的生物, 往往对自己现在或者所拥有的事物
不太注意和爱惜, 只在失去之后, 才知道它的珍贵!
这或许, 谈不上一种毁灭, 但不懂得珍惜, 也是让现在的自己所拥有的美好事物一点一点地失去......
博主并不是故意装文艺范, 而是对生活和人生的一点思考, 也希望看到这段文字的您有所感触和思考.
网友评论