面向对象编程

基本概念

在 OOP 中,class 和 instance 是“模版”和“实例”的关系;

定义 class 就是定义了一种数据类型,对应的 instance 是这种数据类型的实例;

通过 new 操作符创建新的 instance,然后用变量指向它,即可通过变量来引用这个 instance;

使用

类属性设置为 private,不允许外部直接修改,需要通过调用实例方法修改和读取。

类通过定义方法,就可以给外部代码暴露一些操作的接口,同时,内部自己保证逻辑一致性。

方法可以让外部代码安全地访问实例中的字段。

修饰符

  • public:定义了类对外提供的功能
  • private:访问权限被限定在 class 的内部,外部无法调用
  • protected:子类,以及子类的子类可以访问

this 变量

在方法内部,可以使用一个隐含的变量 this,它始终指向当前实例。

如果没有命名冲突,可以省略 this。

继承

继承是面向对象编程的一种强大的代码复用方式。

子类的构造方法可以通过 super()调用父类的构造方法;

继承有个特点,就是子类无法访问父类的 private 字段或者 private 方法。

为了让子类可以访问父类的字段,我们需要把 private 改为 protected。用 protected 修饰的字段可以被子类访问。

多态

  • Override:复写

  • Overload:方法重载

  • final

    • 修饰的方法可以阻止被覆写
    • 修饰的 class 可以阻止被继承
    • 修饰的 field 必须在创建对象时初始化,随后不可修改

子类可以覆写父类的方法

多态的特性就是,运行期才能动态决定调用的子类方法。

抽象类

  • abstract

通过 abstract 定义的方法是抽象方法,它只有定义,没有实现。抽象方法定义了子类必须实现的接口规范;

定义了抽象方法的 class 必须被定义为抽象类,从抽象类继承的子类必须实现抽象方法;

抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。因此,抽象方法实际上相当于定义了“规范”。

面向抽象编程:

尽量引用高层类型,避免引用实际子类型的方式,称之为面向抽象编程。

上层代码只定义规范,不需要子类就可以实现业务逻辑,具体的业务逻辑由不同的子类实现,调用者并不关心。

面向抽象编程使得调用者只关心抽象方法的定义,不关心子类的具体实现。

接口

  • interface
  • implements
  • default:实现类可以不必覆写 default 方法

接口(interface)定义了纯抽象规范,一个类可以实现多个接口;

接口的所有方法都是抽象方法,接口不能定义实例字段;

静态字段和静态方法

  • static

静态字段属于所有实例“共享”的字段,实际上是属于 class 的字段;

推荐用类名来访问静态字段和方法。

实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有实例都会共享该字段。

调用静态方法不需要实例,无法访问 this,但可以访问静态字段和其他静态方法;

静态方法常用于工具类和辅助方法。

核心类

  • String
  • StringBuilder
  • StringJoiner
  • 包装类型
  • JavaBean
  • 枚举

String

在 Java 中,String 是一个引用类型,它本身也是一个 class。但是,Java 编译器对 String 有特殊处理,即可以直接用"..."来表示一个字符串。

Java 字符串 String 是不可变对象;

字符串操作不改变原字符串内容,而是返回新字符串;

两个字符串比较,必须总是使用 equals()方法。

Last Updated: 2023/8/2 10:45:34
Contributors: licong96