面向对象(OOP)

发布时间 2023-12-12 22:48:21作者: PaiAL

面向对象(OOP)

什么是面向对象

面向对象的思想

  • 物以类聚,分类的思维模式,思考问题首先思考解决问题需要哪些分类,然后对各类分别思考。

  • 面向对象适合处理复杂的问题,适合处理需要多人协作的问题。

面向对象编程的本质以类的方式组织代码,以对象的组织(封装)数据

三大特性

  • 封装

  • 继承

  • 多态

类和对象的关系

  • 类是一种抽象的模版。

  • 对象是类中的一个实例化后的具体实例。

例:类:人 对象:乔峰大侠

构造器

注意:

  1. 使用new关键字时,本质是在调用构造器。

  2. 有参构造:一旦定义了一个有参构造,无参构造就必须显示定义。

  3. alt + insert 快速生成构造器。

package com.paial.demo01;

public class Student {
   String name;

   //无参构造方法
   //如果没有定义构造方法,系统会自动提供一个无参构造方法
   //如果定义了构造方法,系统不会自动提供无参构造方法,需要自行定义
   public Student() {
  }
   
   //有参构造方法
   public Student(String name) {
       this.name = name;
  }
   
   //没有返回类型,也不能写void
}

封装

属性私有,get/set

追求:高内聚,低耦合

private:私有。

get/set:提供一些可以操作这个属性的方法。

package com.paial.Dame02;

/*
1.提高程序的安全性
2.隐藏代码的实现细节
3.统一接口
4.系统可维护性增强  
*/

public class Student {
   
   private String name;
   
   private int age;
   
   //get:获得对象的属性
   public String getName(){
       return name;
  }
   
   //set:设置对象的属性
   public void setName(String name){
       this.name = name;
  }
   //alt + insert 快捷键
}

继承

本质:对某一批类的抽象

关键字:extends

相当于父子关系

子类继承了父类就会拥有父类的全部方法(私有的无法被继承)。

ctrl + h:看类之间的关系

注意:一个子类只能有一个父类(一个儿子只有一个父亲,一个父亲可以有多个儿子)

super注意点

  1. super调用父类的构造方法,必须在构造方法的第一个

  2. super必须只能出现在子类的方法或者构造方法中

  3. super和this不能同时调用构造方法!

与this对比

  1. 代表的对象不同

    • this:本身调用者的这个对象

    • super:代表父类对象的使用

  2. 前提:

    • this:没有继承可以使用

    • super:只有继承父类后才能使用

  3. 构造方法

    • this():本类的构造

    • super():父类的构造

方法的重写

需要有继承关系,子类重写父类的方法!

  1. 方法名必须相同

  2. 参数列表必须相同

  3. 修饰符:范围可以扩大但不能缩小:public>protected>default>private

  4. 抛出的异常:范围可以缩小但不能扩大:ClassNorFoundException(小) -> Exception(大)

即:子类的方法必须和父类必要一致,方法体不同;

为什么需要重写?

  1. 父类的功能,子类不一定需要,或者不一定满足!

  2. Alt + Insert : override;

package com.paial.Demo03;

public class Person {

   public void print(){
       System.out.println("Person");
  }
}
package com.paial.Demo03;

public class Student extends Person{
   //对父类方法的重写
   @Override
   public void print() {
       System.out.println("Student");
  }
}
package com.paial.Demo03;

public class Application {
   public static void main(String[] args) {
       Person p = new Student();
       p.print();
  }
}

多态