码出高效:Java开发手册-第2章(3)-阿里云开发者社区

开发者社区> 博文视点Broadview> 正文

码出高效:Java开发手册-第2章(3)

简介: 本章开始讲解面向对象思想,并以Java 为载体讲述面向对象思想在具体编程语言中的运用与实践。当前主流的编程语言有50 种左右,主要分为两大阵营:面向对象编程与面向过程编程。面向对象编程(Object-Oriented Programming,OOP)是划时代的编程思想变革,推动了高级语言的快速发展和工业化进程。OOP 的抽象、封装、继承、多态的理念使软件大规模化成为可能,有效地降低了软件开发成本、维护成本和复用成本。面向对象编程思想完全不同于传统的面向过程编程思想,使大型软件的开发就像搭积木一样隔离可控、高效简单,是当今编程领域的一股势不可......
+关注继续查看

2.3 类

2.3.1 类的定义

类的定义由访问级别、类型、类名、是否抽象、是否静态、泛型标识、继承或实现关键字、父类或接口名称等组成。类的访问级别有public 和无访问控制符,类型分为class、interface、enum。

Java 类主要由两部分组成:成员和方法。在定义Java 类时,推荐首先定义变量,然后定义方法。由于公有方法是类的调用者和维护者最关心的方法,因此最好首屏展示;保护方法虽然只被子类关心,但也可能是模板设计模式下的核心方法,因此重要性仅次于公有方法;而私有方法对外部来说是一个黑盒实现,因此一般不需要被特别关注;最后是getter/setter 方法,虽然它们也是公有方法,但是因为承载的信息价值较低,一般不包含业务逻辑,所以所有getter/setter 方法须放在类最后。

2.3.2 接口与抽象类

正如面向对象四大特性(抽象、封装、继承、多态)所述,定义类的过程就是抽象和封装的过程,而接口与抽象类则是对实体类进行更高层次的抽象,仅定义公共行为和特征。接口与抽象类的共同点是都不能被实例化,但可以定义引用变量指向实例对象。本节主要分析两者的不同之处,首先从语法上进行区分,如表2-1 所示。

表2-1 接口与抽象类的语法区别

100.jpg

抽象类在被继承时体现的是is-a 关系,接口在被实现时体现的是can-do 关系。与接口相比,抽象类通常是对同类事物相对具体的抽象,通常包含抽象方法、实体方法、属性变量。如果一个抽象类只有一个抽象方法,那么它就等同于一个接口。is-a关系需要符合里氏代换原则,例如Eagle is a Bird. Bird is an Object。 can-do 关系要符合接口隔离原则,实现类要有能力去实现并执行接口中定义的行为,例如Plane can fly. Bird can fly. 中应该把fly 定义成一个接口,而不是把fly() 放在某个抽象类中,再由Plane 和Bird 利用is-a 关系去继承此抽象类。因为严格意义上讲,除fly 这个行为外,在Plane 和Bird 之间很难找到其他共同特征。

抽象类是模板式设计,而接口是契约式设计。抽象类包含一组相对具体的特征,性格偏内向,比如某品牌特定型号的汽车,底盘架构、控制电路、刹车系统等是抽象出来的共同特征,但根据动感型、舒适型、豪华型的区分,内饰、车头灯、显示屏等可以存在不同版本的实现。接口是开放的,性格偏外向,它就像一份合同,定义了方法名、参数、返回值,甚至抛出异常的类型。谁都可以来实现它,但如果想实现它的类就必须遵守这份接口约定合同,比如,任何类型的车辆都必须实现如下接口:

public interface VehicleSafe {

/**

* @param initSpeed 刹车时的初始速度

* @param brakeTime 从initSpeed 开始刹车到停止行驶的时间,单位是毫秒

* @return 从initSpeed 开始刹车到停止行驶的距离

*/

double brake(int initSpeed, int brakeTime);

}

刹车是一个开放式的强制行为规范,任何车辆都必须具有刹车的能力,要明确在特定初速度的情况下,刹车时间多久,刹车距离多长。此规范对任何车辆都是强约束的,这就是契约。

接口是顶级的“类”,虽然关键字是interface,但是编译之后的字节码扩展名还是.class。抽象类是二当家,接口位于顶层,而抽象类对各个接口进行了组合,然后实现部分接口行为,其中AbstractCollection 是最典型的抽象类:

public abstract class AbstractCollection<E> implements Collection<E> {

// Collection 定义的抽象方法,但本类没有实现

// Collection 接口定义的方法,size() 这个方法对于链表和顺序表有不同的实现方式

public abstract int size();

// 实现Collection 接口的这个方法,因为对AbstractCollection 的子类

// 它们判空的方式是一致的,这就是模板式设计,对于所有它的子类,实现共同的方法体,

// 通过多态调用到子类的具体size() 实现

public boolean isEmpty() {

// 实现Collection 的方法

return size() == 0;

}

// 其他属性和部分方法实现……

}

Java 语言中类的继承采用单继承形式,避免继承泛滥、菱形继承、循环继承,甚至“四不像”实现类的出现。在JVM 中,一个类如果有多个直接父类,那么方法的绑定机制会变得非常复杂。接口继承接口,关键字是extends,而不是implements,允许多重继承,是因为接口有契约式的行为约定,没有任何具体实现和属性,某个实体类在实现多重继承后的接口时,只是说明“can do many things”。当纠结定义接口还是抽象类时,优先推荐定义为接口,遵循接口隔离原则,按某个维度划分成多个接口,然后再用抽象类去implements 某些接口,这样做可方便后续的扩展和重构。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
8614 0
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
26529 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
10976 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10443 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
11930 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
12255 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
7329 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
3726 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6618 0
+关注
博文视点Broadview
博文视点( Broadview )是电子工业出版社下属旗舰级子公司。在IT出版领域打磨多年,以敏锐眼光、独特视角密切关注技术发展趋势及变化,致力于将技术大师之优秀思想、一线专家之一流经验集结成书,为众多朋友奉献经典著作,助力个人、团队成长。
53
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载