Java, just a language (二)

by 梦中浮云

!声明:如果您有意愿转载本文,请在文章醒目位置注明原文链接。

在准备写第二篇之前,我花了一段时间去思考一个问题。该不该把Java的基础知识全部过一遍?无奈作者是个懒得不行不行的人,所以本系列只会围绕类来阐述,其他的还是交给专业写教材的人去完成。

从本篇开始,我们就要介绍代码了。如果你觉得看起来很吃力,相信我,你需要去学习Java的基础知识。下面给出类的基本格式:

[public] class ClassName{

实例变量;

public ClassName(parameter list){

}

[public] methodName(parameter list){

}

}

1. 类的关键字:class

关键字为何物,自行学习。

2. 类的名称:ClassName

Java程序员有个约定俗成的做法,Java程序中的名称统一使用驼峰表示法。即单词之间没有其他符号,每个单词的首字母大写。类名的首字母必须大写!其实,就算你用小写也会通过编译,只不过多数人都在标成大写。

3. 访问修饰符:public

正如它的意思那般,public表示公有的。与其相对的是private,即私有的。公有类可以被其它类访问,私有类不能被访问。

4. 类的内部:实例变量+方法

实例变量和普通变量的定义方法一样。

方法和C语言中的函数是类似的,不同的是,它也需要访问修饰符。

5. 构造函数:以类名为名字的特殊方法

构造函数的作用就是完成类的实例化。

类是对对象的抽象,那么我们可以将类看成是一个空洞的对象。我们怎么去描述一个对象?通过特征。特征分为静态特征和动态特征,比如:人的眼睛鼻子属于静态特征,而吃喝拉撒属于动态特征。静态特性又可以叫做属性,对应于class中的实例变量。动态特征又叫做行为,对应于class中的方法。这样一来,就不难理解为什么class的组成会这样了。

普通方法内部做些什么我就不说了,因为我没法说。我们来看看构造函数里面到底做了些什么神秘的事情。构造函数是用来实现实例化过程的,那么实例化一个对象需要做什么呢?其实,它只做了一件事情,初始化实例变量。比如:一个人出生的时候,他的静态特征都是已经确定的。

到了这里你应当对类的结构有了一定的理解了,不过还欠缺一点,一点变化。

当你学习了一种规则的时候,一定要尝试着去变通。虽然构造函数的作用是那样,但里面什么都不写是可以的,调用一个方法也是可以的。比如:一个婴儿还在胎中的时候,我们确定了有这个人,但长什么样实在是不知道。所以你最多先给他(她)取个名字,等到出生的时候一看,哇!长得忒俊俏了!这便是空构造函数的例子。至于调用方法就更简单了,我们把赋值过程写在一个方法里,再在构造函数中调用,多了一个中介而已。

继承的表达形式如下:

***** class ClassName extends FatherClassName{}

是不是很简单?就这么简单。但是其背后的概念却又不那么简单了。我不是在故意说绕口令,接下来我们就来看看extends的难点。

假如我们已经定义了灵长类,当我们定义人类的时候,四肢、眼睛、鼻子这些实例变量已经在灵长类中存在了,那么我们就可以有充分的理由去省去这些变量的再定义。可是,人类也需要用这些变量,这时候用extends就可以了。继承的目的就是,共有的放在父类中,独有的放在子类里。

第一篇中吐槽过,Java的所有动作都要从类开始。在这一篇里,我要扩充一下吐槽内容,Java的实例化都要从基类开始。怎么理解这句话,还是生物的例子。如果你要实例化一个人,你要走这么一个流程。造一个动物,造一个哺乳动物,造一个灵长动物,造一个人。很麻烦,但这是必要的。就像盖楼房一样,你要盖第3层,就必须先把地基、第1层、第2层盖好。幸好,我们在写类的继承时只需要考虑父类的实现,建第3层的人没必要去关注地基怎么建。

如果一个类继承自其他类,那么在这个类的构造函数中,必须先调用父类的构造函数。一般我们用super关键字来代替父类,用super(parameter list)来代替父类的构造函数。注意,我要强调一下“先”字,父类构造函数的调用必须放在第一句。

多态

多态不像继承那样有一个extends关键字,它是一些组合行为的结果。三个条件:继承,重写,父类指向子类。

继承在上一部分已经讲过了,不再解释。之前提到子类继承了父类的实例变量,现在要加一句,子类也继承了父类的方法。人类继承了灵长目动物杂食的方法,但是人类的吃很讲究。在可消化的前提下,我们多了色香味的要求。此时,就出现了重写的概念。

子类可以定义与父类同名的方法,并用不同内容实现,这就是重写。

下面为了讲清楚父类指向子类这个条件,我们假设出如下情境:

某一天,动物界发生内乱。哺乳纲、两栖纲、鸟纲三足鼎立。哺乳纲下设三大军团:食肉目、灵长目、啮齿目。哺乳纲伙食部统一为三军做饭,可是自己的菜谱是空的,于是需要调用各军团内部菜谱。很明显,哺乳纲伙食部有足够的权限去调用下属军团的菜谱。菜谱到了之后,伙食部就要依照菜谱做出三类饭来,以供三军食用。食肉目的是鱼肉,灵长目的是满汉全席,啮齿目的是小食品。

父类的变量去指向子类对象,然后依据子类的不同采用不同的内容实现同名方法。这就是多态了。

与重写名字相似的是重载,这里不对重载进行解释,读者可自行查阅学习。

Java, just a language (二)相关推荐

  1. Java基础学习笔记(二)_Java核心技术(进阶)

    本篇文章的学习资源来自Java学习视频教程:Java核心技术(进阶)_华东师范大学_中国大学MOOC(慕课) 本篇文章的学习笔记即是对Java核心技术课程的总结,也是对自己学习的总结 文章目录 Jav ...

  2. Java经典面试(二)

    Java经典面试(二) 1.volatile是什么 2.JMM JMM可见性 3.volatile不保证原子性 volatile不保证原子性理论解释 解决volatile不保证原子性问题 4.vola ...

  3. java负数右移_收入囊中篇---Java程序基础(二)

    前言: 本篇是接着上一篇更新的,如果没有阅读上一篇的话,可以查阅或回顾一下. 1.收入囊中篇---Java基础必备知识(一) 2.收入囊中篇---Java程序基础(二) Java程序基础目录 1.Ja ...

  4. 20155328 《Java程序设计》 实验二(Java面向对象程序设计) 实验报告

    20155328 <Java程序设计> 实验二(Java面向对象程序设计) 实验报告 单元测试 一.单元测试和TDD 编程时需理清思路,将编程需求等想好,再开始编.此部分可用伪代码实现. ...

  5. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

    http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...

  6. Java多线程闲聊(二):活锁和死锁

    Java多线程闲聊(二):活锁和死锁 这两个情况其实都是应该需要避免的情况,为了便于自己的回顾,我还是希望通过尽可能简单的表达来进行简要的归纳. 何谓死锁,就是正正紧紧按照Java的规范进行编程依然会 ...

  7. [Java并发编程(二)] 线程池 FixedThreadPool、CachedThreadPool、ForkJoinPool?为后台任务选择合适的 Java executors...

    [Java并发编程(二)] 线程池 FixedThreadPool.CachedThreadPool.ForkJoinPool?为后台任务选择合适的 Java executors ... 摘要 Jav ...

  8. Java设计模式(十二) 策略模式

    策略模式介绍 策略模式定义 策略模式(Strategy Pattern),将各种算法封装到具体的类中,作为一个抽象策略类的子类,使得它们可以互换.客户端可以自行决定使用哪种算法. 策略模式类图 策略模 ...

  9. Java:Java编程实现导出二维码

    Java:Java编程实现导出二维码 目录 输出结果 代码设计 输出结果 更新-- 代码设计 public class QRCodeUtil {private static final String ...

最新文章

  1. Windows下 MySQL命令 常用操作
  2. Javascript关闭当前窗口
  3. VTK:图片之RGBToYIQ
  4. .net core 注入机制与Autofac
  5. python如果想测试变量的类型、可以使用_python里测试变量类型用什么
  6. mybatis使用char类型字段查询oracle数据库时结果查询不到的问题
  7. 冯永昌:云计算与大数据时代的量化投资
  8. Flutter实战之Sqlite的用法入门
  9. atitit.html编辑器的设计要点与框架选型 attilax总结
  10. linux学习笔记【转】
  11. N720实现4G的TCP连接,数据上云的方法
  12. wifi信号衰减与距离关系_wifi无线信号传输衰减间隔核算公式
  13. 大数据系列之Java调用elasticsearch的增删查改聚合
  14. iphone如何刷android系统升级,iphone4s如何刷成android系统?
  15. 2023-2029年中国博物馆旅游行业市场经营管理及发展前景规划报告
  16. 69个经典Java面试题和答案详解,手慢无
  17. 微信小程序getUserProfile详解
  18. ipa反编译修改icon,简洁教程
  19. torch.save()模型的保存于加载
  20. 苹果app商品定价_苹果将调整应用商店定价:中国区应用最低价涨至8元

热门文章

  1. android 蓝牙键盘_如何在您的Android设备上使用蓝牙键盘
  2. Qt FlowLayout布局
  3. Qt正则表达式匹配中文字符
  4. 手把手教你构建 C 语言编译器(3)- 词法分析器
  5. Node.js安装教程(图文版)
  6. 关于OBS显示器捕获黑屏问题的解决办法之一
  7. 彻底屏蔽女神联盟的广告
  8. 如何在 Word 中使用自定义样式生成文章目录
  9. pca 累积方差贡献率公式_累计方差贡献率和方差贡献率是什么关系SPSS中~~
  10. Android Mqtt 锁屏 service 包活