面向对象的部分知识点

面向对象编程 什么是面向对象面向对象编程 (Object-Oriented Programming , OOP)面向对象编程的本质就是:以类的方式组织代码,以

面向对象编程

什么是面向对象

  • 面向对象编程 (Object-Oriented Programming , OOP)

  • 面向对象编程的本质就是:以类的方式组织代码,以对象的形式封装数据

  • 抽象

  • 三大特性:

    • 封装
    • 继承
    • 多态

值传递和引用传递

Java中都是采用值传递

  • 值传递

    package oop;
    
    //值传递
    public class Demo01 {
        public static void main(String[] args) {
            int a = 1;
            System.out.println(a);  //1
    
            Demo01.change(a);
            System.out.println(a);  //1
        }
    
        //返回值为空
        public static void change(int a){
            a = 10;
        }
    }
    
  • 引用传递

    package oop;
    
    public class Demo02 {
        public static void main(String[] args) {
            Person person = new Person();
            System.out.println(person.name);//null
    
            Demo02.change(person);
            System.out.println(person.name);//小明
        }
    
        public static void change(Person person){
            person.name = "小明";
        }
    }
    
    //定义一个Person类,有一个属性:name
    class Person{
        String name;//null
    }
    
    

构造器

构造器:

  1. 和类名相同
  2. 没有返回值

作用:

  1. new 本质是在调用构造函数
  2. 初始化对象的值

注意点:

  1. 定义有参构造之后,如果想使用无参构造,显示的定义一个无参构造
  2. Alt + Insert

实例

package oop;

public class Student {
    String name;
    int age;

    //1.使用new关键字,本质是在调用构造器
    //2.用来初始化值
    public Student() {

    }

    //有参构造:一旦定义了有参构造,无参就必须显式定义
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
package oop;

public class Application {
    public static void main(String[] args) {
        //new 实例化了一个对象
        Student student = new Student("小明", 20);

        System.out.println(student.name);
        System.out.println(student.age);
    }
}

super注意点:

  1. super 调用父类的构造方法,必须在构造方法的第一个!
  2. super 必须只能出现在子类的方法或者构造方法中!
  3. super 和 this 不能同时调用构造方法!

和 this区别:

代表的对象不同:

  • this :本身调用者这个对象
  • super : 代表父类对象的应用

前提:

  • this :没有继承也可以使用
  • super : 只能在继承条件下才能使用

构造方法:

  • this(): 本类的构造
  • super(): 父类的构造

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

  1. 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符:范围可以扩大,但不能缩小; Public > Protected > Default > Private
  4. 抛出的异常:范围可以缩小,但不能扩大;

注意:重写时子类的方法和父类的必须一致;方法体不同!

多态的注意事项:

  1. 多态是方法的多态,属性没有多态
  2. 父类和子类有联系,类型转换异常
  3. 存在条件:继承关系,方法需要重写,父类引用指向子类对象!