Java面向对象(基础)笔记

方法重载

  1. 方法名:必须相同
  2. 参数列表:必须不同(不同体现在个数或者顺序,参数名没有要求)
  3. 返回类型:没有要求

方法中可变参数

使用细节

代码

public class Main {
    public static void main(String[] args) {
        T t = new T();
        // 1. 可以数组传入
        int[] a = {1, 2, 3};
        System.out.println(t.sum(a));
        // 2. 正常多个参数也可以
        System.out.println(t.sum(1, 2, 3, 4));
        // 3. 0个参数也可以
        System.out.println(t.sum());
        System.out.println(t.sum(2.1, 1, 0));
    }
}
class T {
    public int sum(int... nums) {
        int res = 0;
        for (int i = 0; i < nums.length; ++i) {
            res += nums[i];
        }
        return res;
    }
    // 可变参数有且只能有一个并且必须放在最后
    public double sum(double a, int... nums) {
        double res = a;
        for (int i = 0; i < nums.length; ++i) {
            res += nums[i];
        }
        return res;
    }
}

变量作用域

全局变量(可以不用赋值)、局部变量(必须赋值)

使用细节

构造器细节

构造器并不是完成对象的创建,而是完成对象的初始化。

创建对象流程

注意属性初始化分三步走:默认初始化,显示初始化,构造器初始化

this关键字

本质

使用细节

  1. this关键字可以用来访问本类的属性、方法、构造器
  2. this用于区分当前类的属性和局部变量
  3. 访问成员方法的语法:this.方法名(参数列表)
  4. 访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一条语句)
  5. this 不能在类定义的外部使用,只能在类定义的方法中使用

访问修饰符(记忆)

super关键字

使用细节

  • 隐式super:当创建子类对象时,不管使用子类的那个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去显示地指定父类的某个构造器进行初始化,否则编译不会通过。
  • super 在使用时,必须放在构造器第一行(super只能在构造器中使用)
  • 当子类对象试图访问父类的属性或者方法时,按照继承关系,逐级向上查询,一旦存在因为访问权限问题无法访问的情况(不能访问父类的private属性或者方法),直接报错,不会再向更上一级进行查询访问。

继承链方法查找顺序

  • 如下图所示,当子类中使用this.方法名或者直接方法名时,会从子类逐级向父类查找,但是如果使用super.方法名,访问顺序就跳过当前类,直接从父类开始查找。

super与this的比较

  • super() 和 this() 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器
  • this()和super()都指的是对象,所以,均不可以在static环境中使用

qa:为什么在构造器中不能同时this()和super()?
嗯。它们俩个都要求放在首行,所有不能同时使用了。但想想哦,它们是否需要同时出现呢?在构造器同级用this()调用时,最后肯定有一个“出口”,(总不能用this()循环调用闹着玩bug吧)那么,这个构造器“出口”中肯定没有this(), 它的首行其 实有一个隐式super(),指向上级父层构造器,当然你也可以指定成调用带参构造器(如super(int i))。 或者也可以这么看,当构造器中this()时,就会先进行同类构造器间的调用,如果没有this()时,就会默认有一个隐式super(),对上级父类构造器调用。

方法重写

注意事项

方法重载和重写的区别

多态

需要了解编译类型和运行类型的区别。

多态中属性的值看编译类型,方法的执行看运行类型。

注意事项

isinstanceOf操作符

判断的是一个对象的运行类型是不是xx类型或者xx类型的子类型。

动态绑定机制

见笔记[Java动态绑定机制 ](

posted @ 2022-10-16 16:23  Pluto_Evans  阅读(34)  评论(0)    收藏  举报