【Java面向对象基础】

类与对象

在编程语言的发展过程中,最底层便是0101的二进制语言,即机器语言,这种是机器可以直接识别无需翻译的语言,但这种无法应用于程序员使用,随之便出现了汇编语言,汇编语言实际上是将机器语言抽象成了指令进行执行,但指令编写过于繁琐,便出现了C语言等面向过程的语言,此时,编程语言便可以被程序员很好的使用。
虽然面向过程的语言已经有了长足的进步,但依旧是站在计算机的结构上进行编程,这对于程序员解决问题仍然不是很友好,尤其对于理解该语言编写的程序需要耗费大量的时间。因此,出现了面向对象的编程语言。Java语言正是应用最为广泛的面向对象的语言。
在学习Java语言之前,我们先了解两个概念:类和对象

对象

SmallTalk是历史上第一门获得成功的面向对象语言,其中有一个重要的特征就是“万物皆对象”;这个特征也被后续的面向对象语言所延用,Java也不例外。
那究竟什么是对象呢?
既然“万物皆对象”,那么自然中的一切事物都可以是对象,例如:猫是一个对象,狗同样是一个对象。
Grady Booch对对象做了一种更为简洁的描述:
对象具有状态、行为及标识
也就意味着每一个对象都是一个独立的个体,有着自己的一块内存空间。

每一个对象都是一个不同的个体,但个体中可能存在相同的特征和行为,例如:每一只猫都有颜色、体重等外观,都可以进行吃饭、发起叫声的行为。因此我们可以这些的共同特征和行为抽取出来,组成一个类——猫类。
类就是将自然界中某一类具有相同特征和行为的对象抽取得到的一种类型,抽取的特征和行为就是类的属性和方法。也就是说每一个对象是类的实例。

面向对象(OOP)的三大特征

封装

程序设计所追求的“高内聚,低耦合”,往往取决封装的效果。
封装是只暴露必要的接口,隐藏其内部实现的细节,一方面封装者可以自由地改变程序内部的数据而不影响使用者,另一方面很好地保证了程序的安全性。
如何去封装是很考验程序员功底的一件事,好的封装可以极大地提高程序的复用性和降低程序的耦合性。在《On Java8》这本书中便有一个封装的例子:

在一个打印支票的程序里,你一开始可能会认为需要一个既能排版又能打印的对象。然后,你发现这些功能对于一个对象而言太多了,其实你需要3个或者更多对象来负责这些功能。比如,一个对象包含了所有可能的打印布局,通过查找它可以知道如何打印一张支票。另一个或一组对象则作为通用打印接口,负责连接所有不同型号的打印机(但不负责记账,也许你需要购买该功能而非自行创建)。还有一个对象负责整合前两个对象提供的服务以完成打印任务。因此,每一个对象都提供了一种配套服务。在面向对象领域,出色的设计往往意味着一个对象只做好一件事,绝不贪多。这条原则不只适用于那些从外部购买的对象(比如打印接口对象),也适用于那些可复用的对象(比如支票排版对象)。

在Java中可以使用访问修饰符来进行访问控制来进行封装,三种显示访问修饰符:private、protect、public和一种默认的访问修饰符:包访问。下面是不同修饰符的访问权限:

image.png

封装的好处

  1. 降低耦合性:封装的类可以独立进行开发、测试、使用、优化等,极大的降低了耦合性
  2. 提高复用率
  3. 隐藏细节,便于使用

继承

继承是一种is-a的关系,继承关系可以极高地提升代码的复用性。
判断是不是继承关系,可以用里氏替换原则进行判断

里氏替换原则:派生类(子类)对象可以在程式中代替其基类(超类)对象。

继承分为两种情况:一种是继承后,子类不增加方法,这种被认为是完美的继承;另一种子类继承父类后,增加属于自己的接口方法,这种Bruce Eckel认为是“is like a”关系,这种继承虽然可以用子类替换父类,但是不能通父类的接口调用子类的方法。
Java中是类是单继承,不支持多继承,接口可以进行多实现。
Java中的类都有一个共同的父类Object,正是因为这个共同的父类这种单根层次结构使得Java很好地实现垃圾收集器。

多态

多态分为编译时多态和运行时多态。

编译时多态

编译时多态主要指方法的重载
方法的重载是同一个类中,方法名相同,形参列表不同。

运行时多态

运行时多态主要发生在子类继承父类,重写父类方法。

  • 除了修饰符外,方法名称、返回值和参数必须一致
  • 子类的访问权限修饰符不能小于父类的
  • 子类抛出的异常不能比父类多
  • 父类的静态方法只能被重写为静态方法,父类的非静态方法不能重写为静态方法
  • 父类的私有方法不能够被重写
  • 父类的抽象方法能被重写(实现或继续abstract抽象)
  • 父类的非抽象方法可以被重写为抽象方法
    运行时多态,主要运行时通过动态绑定来完成对子类方法的调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值