关闭

网易云课堂Java进阶学习笔记系列03 -- 第7周 抽象与接口

标签: Java基础abstract接口网易云课堂细胞自动机
124人阅读 评论(0) 收藏 举报
分类:

第七周 抽象与接口
在第一周就有一个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
  • 接口规定了长什么样, 但是不管里面有什么

接口设计模式

示例二
数据与表现分离: 细胞自动机

CellMachine.png

  • 程序的业务逻辑与表现无关
    • 表现可以是图形的也可以是文本的
    • 表现可以是当地的也可以是远程的

View和Field的关系

责任驱动的设计
GUI: 网格化

最后运行结果:

细胞自动机.png

源代码下载地址:
https://github.com/menglanyingfei/MOOC_Wengkai_Java/tree/master/code/cell_machine/src



写在最后:
1. 写这篇博客时听的歌曲
http://music.163.com/#/song?id=21312101
2. 写作时间
2017/07/19
22:50:00
3. 博客链接
欢迎访问我的主页
http://blog.csdn.net/menglanyingfei?viewmode=contents
4. 一些感慨
最近一段时间, 突然发现了: 在文学上, 这句话很经典 ,

悲剧就是把美好的东西毁灭给人看. – 鲁迅

生活中, 有各种开心与悲伤, 其实, 在人内心深处是有一种对美好事物的向往,
由于它的存在, 才产生了各种目标与信念. 但人真是一种奇怪的生物, 往往对自己现在或者所拥有的事物
不太注意和爱惜, 只在失去之后, 才知道它的珍贵!
这或许, 谈不上一种毁灭, 但不懂得珍惜, 也是让现在的自己所拥有的美好事物一点一点地失去……
博主并不是故意装文艺范, 而是对生活和人生的一点思考, 也希望看到这段文字的您有所感触和思考.

2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12919次
    • 积分:670
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:9篇
    • 译文:0篇
    • 评论:10条
    个人说明
    个人很喜欢的一句话, (摘自网络):
    时光荏苒,祝愿不要忘记曾经的初心

    本人现在是一名大二软件工程专业的学生, 每月会坚持更新, 本博客会总结, 整理, 分享个人学习的相关技术知识, 用来记录自己不断进步的历程, 当然内容会以Java为主线.

    虽然是技术博客, 但毕竟是人, 也有自己的情感, 所以, 有时也会分享一些有用的学习资源和一些学习经验和方法, 同时也会写一些其它方面上自己的感受和想法!

    或许我的博客不是写得非常好, 但每一篇文章绝对会用心写! 如果, 你发现有不足或者错误之处, 非常欢迎指出, 当然也欢迎各位小伙伴们来交流技术和学习感受.

    每天进步一点点, 共勉!
    博客专栏
    最新评论