type
status
date
slug
summary
tags
category
icon
password
面向对象技术三大特征
- 继承
- 封装
- 多态
什么是继承?(inheritance)
- 继承提供一种方式,可以根据现存的类创建新的类
- 新的类可以继承现有类的所有 non-private 属性和方法
- Java 中利用 extends 关键字实现继承
- 继承可以帮助我们少写很多代码
何时可以使用继承?
- 对象间如果是IS A关系就可以使用继承
- 如果是 HAS A 关系不适合用继承
- IS A
- Square is a shape
- Java is a programming Language
- SUV is a car
HAS A- Square has corner
- Car has wheel
继承相关术语与语法
- SuperClass
- Parent Class /Base Class 基类
- 能让别的类继承
- SubClass
- Child Class /Derived Class 派生类
- 继承别的类
- 语法:class SubClass extends SuperClass {}
继承使用实战
- 父类的属性只要不是私有的的之类全部都可以继承
- 继承跟子类的方式是 public 还是 private 没有任何关系
instanceof关键字
- 用途:判断是否是某个类的实例
- 语法:实例 instanceof 类
- 返回 boolean
- 子类的实例也是父类的实例
super关键字
- 用于在子类中指代父类对象
- 用法
- 访问父类属性
- 访问父类方法
- 构造器:在创建子类对象时,会同时创建父类对象(通过隐式调用父类的构造器)
方法重写Override
- Overide : 子类重写父类方法
- 核心:用自身行为代替父类行为
- 如何重写
- 方法名,参数列表照抄
- 返回值类型要和父类一样(或者是subType)
- 访问权限可以大于等于父类方法的访问权限
protected继承访问权限
- 使用关键字 protected 进行权限控制
- protected 权限可以被本包中的其他类和其他包中的子类访问
final关键字
- 修饰变量:变量不可重新赋值
- 修饰方法:方法不可被 override
- 修饰类:类不能被继承
- 如 Interger 类 ,String 类不能被继承
深入Object类
- Object 类是所有类的父类
- Object类的属性 /方法可以被所有 Java 对象使用
- 没有写extends默认继承Object
- 两个核心方法
- toString
- equals
重写 toString 方法
- 为了让人类容易阅读
如何自动生成toString方法?
- 每次自己手动重写 toSring方法比较麻烦,我们可以让 idea 帮助我们自动生成
重写equals方法
- 比较两个 class 的地址是否相同
继承的分类
- 单继承:使用
extends
关键字实现单继承。
- 多继承:Java 不支持多继承,但是可以使用
interface
实现多继承。
什么是封装(encapsulation)
- 数据隐藏:隐藏类的内部工作原理,并简单地提供一个接口,外部世界可以通过该接口与类进行交互,而不知道内部发生了什么
- OOP中的封装是指将数据和操作数据的方法绑定在一个单元(类)中
- 我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口
- 封装的好处:好维护,好修改,好限制
- 封装隐藏了内部实现细节,只暴露出接口
- 电灯对象
- 你只访问它的‘开关’接口,不关心内部的’电路细节’
- 汽车对象
- 你只访问它的‘方向盘‘接口,不关心内部细节
为什么要封装?
- 如果你不是使用封装,所有的属性都使用public暴露的话,你就很难去改变
- 封装不仅是为了隐藏内部实现细节。它可以减少代码之间的耦合,保证代码的健壮性。
从一个实例看封装的好处
什么是多态(polymorphism)?
- poly = many , morpg = forms
- 为不同数据类型的实体提供统一的接口,或使用一个单一的符号来表示多个不同的类型
- 记忆类型举例:正方形,圆形,三角形,六边形都是平面图形,都可以计算面积,但是它们有不同的面积计算公式
如何实现多态?
对象转型(Cast)
- 对象转型是指将一个对象在不改变其本质的前提下,把它转换为另一个对象。在Java编程语言中,对象转型分为向上转型和向下转型。
- 向上转型:Sub Class —> Super Class
- 向上转型指的是把一个子类对象转换为父类对象,这种转型是隐式的,也就是不需要强制类型转换,因为子类一定能够兼容父类的所有方法和属性。
- 子类对象赋给父类引用
- 向下转型:Super Class —> Sub Class
- 向下转型则是指把一个父类对象转换为子类对象,这种转型必须使用强制类型转换,因为父类对象不一定能够兼容子类的所有方法和属性,需要使用强制类型转换来告诉编译器具体的类型。
- 需要注意的是,在进行向下转型时,如果原始对象的类型不是所期望的类型,那么会抛出ClassCastException异常。因此,在进行向下转型时一定要确保原始对象的类型是准确无误的。
- 向上转型是自动的,向下转型是强制的
- 并不是所有的转型都能成功