面向对象总结

面向对象
  • 对象:具体的某一个东西

  • 类:某一类的统称,抽象的概念

  • 对象依托于类的模板构建出来,类有一个模板

  • 类里面有字段、方法

    public class Student{
        int age;
        String name;
        
        public void study() {
            System.out.println("学习");
        }
    }
  • 对象Student student = new Student();new出来的东西都在==堆内存==,student变量存在==栈内存==

  • 使用student.name/student.study() 对象名.属性/ 对象名.方法名()

  • 成员变量:类的属性,在整个类;局部变量:方法中定义的变量,所在方法体,或者离他外面最近的大括号内

  • 构造方法,在创建对象的时候会调用,如果类的内部没有显式声明,会生成一个默认的无参构造

  • this的作用:
    • 访问本类中的方法,此时谁调用就是谁

    • 区分成员变量和局部变量this.属性名指代成员变量

    • 使用this可以调用重载的构造方法,只能在构造方法的第一行使用

  • static关键字:
  •   静态的意思,类变量,类方法;静态成员和实例成员的区别

    • static在加载类模板的时候初始化,实例成员在创建对象的时候初始化

    • static可直接通过类名访问属性和方法,实例成员只能通过对象名访问属性和方法

    • static不能访问实例成员,实例成员都可以访问

    • 静态成员不能使用this关键字,实例成员可以使用

  • 代码块:实例代码块{}和静态代码块static{}

  • 对象初始化的顺序:
    • 加载类

    • 加载静态成员

    • 执行静态代码块和赋值等操作

    • 初始化实例成员

    • 执行实例代码块和赋值等操作

    • 执行构造方法

  • 对象数组:数组中的每一个成员都是对象

  • 包:
  • 存放类,防止类的命名冲突,实际上就是一个文件夹

    package com.kfm; // 声明包的含义是声明当前类所在的包。
    ​
    import com.kfm.movie.Test; // 导入包的含义是声明当前类要使用到的其他类所在的包。
    • 导包的情况

      1. 不在同一个包的情况或者使用全限定名java.util.Scanner/java.util.Objects

      2. java.lang包下的类不需要导包

      3. 同包或者子包不需要导包

  • 三大特性:封装、继承、多态。
    • 封装:
    • 合理隐藏、合理暴露

      • 访问修饰符:

        • 三个4种

          • public : 任何地方可以访问

          • protected : 同包任意类,不同包子类可以访问

          • package-access:同包任意类

          • private : 只能本类访问

          • 只有public和package-access可以修饰类

      • 字段私有

      • 对外提供getter/setter方法

        • getter : get + 字段名首字母大写

        • setter : set + 字段名首字母大写

        • boolean的get方法 :is + 字段名首字母大写

    • 继承:
    • 子类对父类的扩展

      • java类只支持单继承

      • 所有类的父类都是Object

      • 子类继承父类的非私有属性和方法

      • 子类可以新增属性和方法

      • 子类可以调用父类的构造,super关键字

      • 重写(覆盖)和隐藏

        • 在继承关系中,子类和父类存在方法名相同,参数列表相同,返回值类型一致,访问修饰符相同或变大,抛出异常相同或缩小的方法称为重写

        • 在继承关系中,成员变量只能被隐藏,不能被重写

        • 变量可以交叉隐藏,实例变量隐藏静态变量,静态变量隐藏实例变量

        • static方法不能被重写,只能被隐藏

        • static方法不能重写实例方法,实例方法也不能重写static方法

      • super关键字:

        • 在子类中调用父类的构造方法,必须放在构造方法的第一行

        • 调用父类的属性和方法

        • super不能表示当前对象

        • super只能出现在子类中,不能在static成员中使用

      • 子类实例化过程【有父才有子,有父类对象才有子类对象】

        • 加载父类,初始化父类的静态成员

        • 执行静态代码块和赋值等操作

        • 加载子类,初始化子类的静态成员

        • 执行子类的静态代码块和赋值等操作

        • 初始化父类的实例成员

        • 执行父类的实例代码块和赋值

        • 执行父类的构造

        • 初始化子类的实例成员

        • 执行子类的实力代码块和赋值

        • 执行子类的构造

      • final关键字

        • 修饰变量,称为常量,不可变,一旦被初始化无法被修改,在构造或者第一次声明的时候就初始化

        • 修饰类,类不可被继承

        • 修饰方法,方法不可被重写

      • Object类

        • toString:

        • equals:

        • getClass

        • hashCode:

      • Objects类:

        • equals:

        • toString:

        • nonNull

        • isNull

        • requireNonNull

      • this和super的区别:

        • this访问本类中的方法,包括继承父类的方法,super访问父类的方法

        • this(参数列表)调用本类的构造方法,必须放在构造方法的第一行

        • super(参数列表)表示调用父类的构造方法,必须方法在子类的构造方法的首行

        • this和super调用构造的时候不能同时出现

        • this.字段调用对象的字段,也包括继承父类的字段

        • super.字段调用父类中的字段

        • this和super方法只能在实例成员中使用,不能在静态成员中使用

        • this表示当前对象,super不能表示当前对象

    • 多态:
    • 一个特定类型的变量可以引用不同类型的对象,能够自动调用引用的对象的方法

      • 调用谁的方法取决于=右边指向的对象是哪一个

      • 方法重写是实现多态的基础

      • 父类类型 变量名 = 子类对象

        • 只能调用重写的父类的方法或者父类的方法

        • 不能调用子类的新增的方法

      • 向下转型

        • 验证父类引用是否属于子类对象 instanceof关键字【推荐】

          Pet pet = new Dog();
          if (pet instanceod Dog) {
              Dog dog = (Dog)pet;
          }
          ​
          if (pet instanceod Dog dog) {
              // 这样就可以调用Dog类中新增的方法和字段..
          }

        • getClass()方法

          Pet pet = new Dog();
          if (pet.getClass == this.getClass) {
              // 再进行强转
          }
      • 使用父类作为形参类型

        • 参数的类型取决去父类的引用指向的是哪个子类对象

      • 使用父类作为返回值类型

        • 返回值的类型取决于父类的引用最终执行的是哪个子类对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值