javase 02 java面向对象

02 java面向对象

解决问题的思维方式:面向对象,怎么做,谁可以做,叫他做。

​ 面向过程,第一步做什么,第二步做什么。

面向对象:

  • 都是解决问题的思维方式,都是代码组织的方式。

  • 解决简单问题可以使用面向过程

  • 解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。

面向对象思考方式:

遇到复杂问题,先从问题中找名词,然后确立这些名词哪些可以作为类,再根据问题需求确定的类的属性和方法,确定类之间的关系。

面向对象编程语言的三大特征

封装 继承 多态

封装:显示客户需要的功能,底层实现的功能就隐藏起来。

继承:继承父类,继承它的方法属性。 一种连接类的方式 类似于单向链表。

多态:类的目标不明确,根据对象获取目标子类的方法。

静态代码块

  • 是在类初始化时执行,不是在创建对象时执行。
  • 静态初始化块中不能访问非static成员

执行顺序:上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静

态初始化块,直到我们的类的静态初始化块为止。(到继承再看)

package

通常是类的第一句非注释性语句。

包名:域名倒着写即可,再加上模块名,并与内部管理类。

其实内部实现就是靠目录结构来做到的。

写项目时都要加包,不要使用默认包。

jdk中的主要包

  • java.lang -包含一些Java语言的核心类,如String、Math、Integer、System 和Thread,提供常用功能。
  • java.net -包含执行与网络相关的操作的类。
  • java.io -包含能提供多种输入/输出功能的类。
  • java.util -包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。

import

导入其他包

静态导入(了解)

静态导入的作用:用于导入指定类的静态属性

import static java.lang.Math.*; //导入Math类的所有静态属性

import static java.lang.Math.PI; //导入Math类的PI属性

关键字 同一个类 同一个包 子类 所有类
private *
default * *
protected * * *
public * * * *

javaBean对象

JavaBean就是一个简单的java类,用来存储基本的信息,一般和数据库的表对应

方法的重写 override

父类方法的重写:

  • “==”:方法名、形参列表相同。
  • “≤≤”:返回值类型和异常类型,子类小于等于父类。
  • “≥”:访问权限,子类大于等于父类

以下方法不能重写:

  • private 修饰的方法
  • static 修饰的方法
  • final 修饰的方法

属性查找顺序

  • 查找当前类中有没有属性h
  • 依次上溯每个父类,查看每个父类中是否有h,直到Object
  • 如果没找到,则出现编译错误。
  • 上面步骤,只要找到h变量,则这个过程终止。

构造方法的调用顺序

  • 根据super的说明,构造方法第一句总是:super(…)来调用父类对应的构造方法。

  • 先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。

  • 默认构造器空 则一层一层调用空构造器。

Object类中的方法

  • 每个类都有Object作为超类。 所有对象(包括数组)都实现了这个类的方法。

    方法签名 方法作用功能
    Class<?> getClass() 返回此 Object的运行时类。
    boolean equals(Object obj) 指示一些其他对象是否等于此。
    String toString() 返回对象的字符串表示形式。
    void notify() 唤醒正在等待对象监视器的单个线程。
    void notifyAll() 唤醒正在等待对象监视器的所有线程。
    void wait(long timeout) 导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法。
    int hashCode() 返回对象的哈希码值。

多态

模糊 指明父类,在使用过程中可以获取方法的特定功能,实现多种形态。

方法绑定

执行调用时,JVM根据相关信息,能够执行内存地址中代表该方法的代码。

静态绑定

在编译期完成,可以提高代码执行速度。静态绑定的方法包括:

  1. 静态方法

  2. 构造器

  3. private方法

  4. 用关键字super调用的方法

动态绑定

动态绑定是指在 执行期间(非编译期) 判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。程序运行过程中,把函数(或过程)调用与响应调用所需要的代码相结合的过程称为动态绑定。通过对象调用的方法,采用动态绑定机制。 这虽然让我们编程灵活,但是降低了代码的执行速度。这也是JAVA比C/C++速度慢的主要因素之一。

抽象与接口

抽象

抽象类 抽象方法

抽象类

  • 有抽象方法的类只能定义能抽象类

  • 抽象类不能实例化,即不能用new来实例化抽象类。

  • 抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new实例,只能用来被子类调用。

  • 抽象类只能用来继承。

  • 抽象方法必须被子类实现。

抽象类和普通父类的区别,就在于包含抽象方法,抽象方法必须被子类实现,从而可以对子类的设计进行规范。抽象类的作用说白了就是

实现了规范和具体实现的分离。通过 abstract 方法定义规范,然后要求子类必须定义具体实现。引用变量仍然可以定义为抽象类,这样就可以规范地实现多态了。

接口

规范方法的实现 规范

为什么需要接口?接口和抽象类的区别?

接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。

全面地专业地实现了:规范和具体实现的分离。

抽象类还提供某些具体实现,接口 不提供任何实现 ,接口中所有方法都是抽象方

法。接口是完全面向规范的,规定了一批类具有的公共方法规范。

从接口的实现者角度看,接口定义了可以向外部提供的服务。

从接口的调用者角度看,接口定义了实现者能提供那些服务。**接口是两个模块之间通信的标准,通信的规范。**如果能把你要设计的系统之间模块

之间的接口定义好,就相当于完成了系统的设计大纲,剩下的就是添砖加瓦的具体

实现了。大家在工作以后,做系统时往往就是使用 “面向接口” 的思想来设计系

统。

定义交通工具时,我定义一个抽象类Vehicle, 在定义子类Car, Plane,Train**。没有问**

题。抽象类和子类是一种一般和特殊的关系。

接口呢,他和子类是实现规则的关系。比如:我定义一个接口Runnable**,Car实现**

它就能在地上跑,Train实现也能在地上跑。飞机实现它也能在地上跑。就是说,如

果他是交通工具,就一定能跑,一定要实现Runnable**。我再定义接口:**

Fligntable**,如果要在天上飞就一定要实现Flightable接口。**

类类 -> 一个类 继承 另外一个类

类抽象类 > 一个类继承另一个抽象类 (类要重写抽象方法)

类接口 -> 一个类实现若干个接口(类种需要重写所有接口种的所有方法)

接口接口 -> 一个接口继承若干个接口

Java8后

Java 8发布以后,可以给接口添加新方法,但是,接口仍然可以和它的实现类保持兼容。这非常重要,因为你开发的类库可能正在被多个开发者广泛的使用着。而Java 8之前,在类库中发布了一个接口以后,如果在接口中添加一个新方法,那些实现了这个接口的应用使用新版本的接口就会有崩溃的危险。(java8中也不能直接完全避免这个问题)接口中被实现的方法叫做default方法,用关键字default作为修饰符来标识。当一个类实现一个接口的时候,它可以实现已经在接口中被实现过的方法,但这不是必须的。这个类会继承default方法。这就是为什么当接口发生改变的时候,实现类不需要做改动的原因。在 java8 中的接口中不仅增加了默认方法,还增加了静态方法。定义一个或者更多个静态方法。类似于类中的静态方法,接口定义的静态方法可以独立于任何对象调用。所以,在调用静态方法时,不需要实现接口,也不需要接口的实例,也就是说和调用类的静态方法的方式类似。语法如: 接口名 字.静态方法名 。实现接口的类或者子接口不会继承接口中的静态方法。static不能和default同时使用。在java8中很多接口中都增加了静态方法

类的设计原则

  • 单一职责原则

  • 里氏代换原则 这就是要求继承是严格的is-a关系。所有引用基类的地方必须能透明地使用其子类

    的对象。

  • 依赖倒置原则 面向接口编程

  • 接口隔离原则

  • 迪米特法则迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简

    写LKP),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有

    尽可能少的了解,只和朋友通信,不和陌生人说话。

  • 开闭原则 对修改关闭,对扩展开放。

类与类之间的关系

  • 继承关系

  • 实现关系

  • 依赖关系 简单的理解,依赖就是一个类A使用到了2,而这种使用关系是具有偶然性的、临时

    性的、非常弱的,但是类B的变化会影响到类A。

  • 关联关系 关联体现的是两个类之间语义级别的一种强依赖关系,比如我和我的朋友,这种关

    系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性

    的,而且双方的关系一般是平等的。关联可以是单向、双向的。

  • 聚合关系 聚合是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。

  • 组合关系 组合也是关联关系的一种特例,它体现的是一种contains-a的关系,这种关系比聚

    合更强,也称为强聚合。

猜你喜欢

转载自blog.csdn.net/xiaoliang98/article/details/109341341