美文网首页
持续精进_java语言4

持续精进_java语言4

作者: 兮兮码字的地方 | 来源:发表于2018-11-28 22:21 被阅读10次

一,面向对象

基本三要素:封装、继承、多态。

封装的目的是隐藏事务内部的实现细节,以便提高安全性和简化编程。

继承是为了代码复用,但要注意,继承可以看作是非常紧耦合的一种关系,父类代码修改,子类行为也会变动。

多态,重写(override)和重载(overload)、向上转型。简单说,重写是父子类中相同名字和参数的方法,不同的实现;重载则是相同名字的方法,但是不同的参数,本质上这些方法签名是不一样的;向上转型,父类的引用可以指向子类的实例。

ps:

方法名称和参数一致,但是返回值不同,这种情况在 Java 代码中算是有效的重载吗?——不是的,编译都会出错。

二,接口和抽象类

接口和抽象类是 Java 面向对象设计的两个基础机制。

接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到 API 定义和实现分离的目的。接口,不能实例化;不能包含任何非常量成员,任何 field 都是隐含着 public static final 的意义;同时,没有非静态方法实现,也就是说要么是抽象方法,要么是静态方法。Java 标准类库中,定义了非常多的接口,比如 java.util.List。

抽象类是不能实例化的类,用 abstract 关键字修饰 class,其目的主要是代码重用。除了不能实例化,形式上和一般的 Java 类并没有太大区别,可以有一个或者多个抽象方法,也可以没有抽象方法。抽象类大多用于抽取相关 Java 类的共用方法实现或者是共同成员变量,然后通过继承的方式达到代码复用的目的。Java 标准库中,比如 collection 框架,很多通用部分就被抽取成为抽象类,例如 java.util.AbstractList。

ps

Java 不支持多继承。这种限制,在规范了代码实现的同时,也产生了一些局限性,影响着程序设计结构。Java 类可以实现多个接口,因为接口是抽象方法的集合,所以这是声明性的,但不能通过扩展多个抽象类来重用逻辑。

在一些情况下存在特定场景,需要抽象出与具体实现、实例化无关的通用逻辑,或者纯调用关系的逻辑,但是使用传统的抽象类会陷入到单继承的窘境。以往常见的做法是,实现由静态方法组成的工具类(Utils),比如 java.util.Collections。

基本的设计原则——S.O.L.I.D 原则

单一职责(Single Responsibility),类或者对象最好是只有单一职责,在程序设计中如果发现某个类承担着多种义务,可以考虑进行拆分。

开关原则(Open-Close, Open for extension, close for modification),设计要对扩展开放,对修改关闭。换句话说,程序设计应保证平滑的扩展性,尽量避免因为新增同类功能而修改已有实现,这样可以少产出些回归(regression)问题。

里氏替换(Liskov Substitution),这是面向对象的基本要素之一,进行继承关系抽象时,凡是可以用父类或者基类的地方,都可以用子类替换。

接口分离(Interface Segregation),我们在进行类和接口设计时,如果在一个接口里定义了太多方法,其子类很可能面临两难,就是只有部分方法对它是有意义的,这就破坏了程序的内聚性,可以通过拆分成功能单一的多个接口,将行为进行解耦。在未来维护中,如果某个接口设计有变,不会对使用其他接口的子类构成影响。

依赖反转(Dependency Inversion),实体应该依赖于抽象而不是实现。也就是说高层次模块,不应该依赖于低层次模块,而是应该基于抽象。实践这一原则是保证产品代码之间适当耦合度的法宝。

相关文章

  • 持续精进_java语言4

    一,面向对象 基本三要素:封装、继承、多态。 封装的目的是隐藏事务内部的实现细节,以便提高安全性和简化编程。 继承...

  • 持续精进_java语言 1

    一,java的“一次编译、到处运行”具体涵义 说的是Java语言跨平台的特性(可在不同的操作系统中运行),是依靠J...

  • 持续精进_java语言2

    1 String字符串 在Java 9之前,字符串是使用 char 数组来存数据的,这样非常直接。(java开始改...

  • 持续精进_java语言3

    一,IO java.io 包,提供了通过输入输出流的方式来实现网络通信。 很多时候,java.net 下面提供的部...

  • 彭晋辉:如何理解六个精进

    《活法》拆解(023) I:用自己的语言重述信息: 六个精进,1,持续努力,2,戒骄戒躁,3,每天反省,4,感恩生...

  • Jenkins+kubernetes(第1节)

    Jenkins 特性 开源java语言开发持续集成,持续部署工具 易于安装:yum/docker/war 消息通知...

  • 如何理解六个精进《活法》拆解(023)

    I:用自己的语言重述信息: 六个精进,1,持续努力,2,戒骄戒躁,3,每天反省,4,感恩生命,5,行善积德,6,积...

  • 持续精进 4/21

    文|温梓 见 每一天其实都相对来说比较平静,早起阅读、打卡;白天学网课、看看书;晚上学理财、教资。 今天多了一点。...

  • Java基础介绍

    一、Java技术体系: 1,java程序设计语言 2,Java虚拟机(JVM) 3,Java API类库 4,辅助...

  • 第4章 类和接口

    第4章 类和接口 类和接口是Java程序设计语言的核心,它们也是Java语言的基本抽象单元。 初学Java的时候感...

网友评论

      本文标题:持续精进_java语言4

      本文链接:https://www.haomeiwen.com/subject/ctstcqtx.html