NotionNext
NotionNext
编程爱好者
/互联网从业者
/知识分享博主
认知决定态度,态度决定选择,选择决定人生

Java面向对象的三个特性

NotionNext - 2023-4-11 - Technical / Java / 后端
发布于:2023-4-11|最后更新: 2023-8-29|
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 帮助我们自动生成
notion image
 

重写equals方法

  • 比较两个 class 的地址是否相同

继承的分类

  • 单继承:使用 extends 关键字实现单继承。
  • 多继承:Java 不支持多继承,但是可以使用 interface 实现多继承。
 

什么是封装(encapsulation)

  • 数据隐藏:隐藏类的内部工作原理,并简单地提供一个接口,外部世界可以通过该接口与类进行交互,而不知道内部发生了什么
  • OOP中的封装是指将数据和操作数据的方法绑定在一个单元(类)中
  • 我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口
  • 封装的好处:好维护,好修改,好限制
    • 封装隐藏了内部实现细节,只暴露出接口
    • 电灯对象
      • 你只访问它的‘开关’接口,不关心内部的’电路细节’
    • 汽车对象
      • 你只访问它的‘方向盘‘接口,不关心内部细节

为什么要封装?

  • 如果你不是使用封装,所有的属性都使用public暴露的话,你就很难去改变
  • 封装不仅是为了隐藏内部实现细节。它可以减少代码之间的耦合,保证代码的健壮性。

从一个实例看封装的好处

什么是多态(polymorphism)?

  • poly = many , morpg = forms
  • 为不同数据类型的实体提供统一的接口,或使用一个单一的符号来表示多个不同的类型
  • 记忆类型举例:正方形,圆形,三角形,六边形都是平面图形,都可以计算面积,但是它们有不同的面积计算公式

如何实现多态?

对象转型(Cast)

  • 对象转型是指将一个对象在不改变其本质的前提下,把它转换为另一个对象。在Java编程语言中,对象转型分为向上转型和向下转型。
  • 向上转型:Sub Class —> Super Class
    • 向上转型指的是把一个子类对象转换为父类对象,这种转型是隐式的,也就是不需要强制类型转换,因为子类一定能够兼容父类的所有方法和属性。
    • 子类对象赋给父类引用
  • 向下转型:Super Class —> Sub Class
    • 向下转型则是指把一个父类对象转换为子类对象,这种转型必须使用强制类型转换,因为父类对象不一定能够兼容子类的所有方法和属性,需要使用强制类型转换来告诉编译器具体的类型。
    • 需要注意的是,在进行向下转型时,如果原始对象的类型不是所期望的类型,那么会抛出ClassCastException异常。因此,在进行向下转型时一定要确保原始对象的类型是准确无误的。
  • 向上转型是自动的,向下转型是强制的
  • 并不是所有的转型都能成功
 
 
 
Redux 概念手写简化版的 Promise