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的关系,这种关系比聚合更强,也称为强聚合。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值