Java基础>09 - extends 、super关键字、instanceof、final

个人学习总结:
链接:【Java基础、springboot、springcloud、docker 等,学习目录】

一、继承 extends :

继承描述的是事物之间的所属关系。子类的共性抽取形成父类,子类继承来自父类的所有属性和方法。

注意:
1、继承后子父类的耦合性太强,所以只有真正需要继承的时候才使用继承。
2、父类私有的成员(private)、构造函数不能被继承。
3、创建子类对象时,默认会调用父类无参的构造函数。
4、父类又名超类、基类。
5、创建子类对象时,默认会调用父类无参构造函数(要先初始化父类,因为子类创建对象完毕可能会使用到父类的成员)。
6、降低类和类之间的代码重复、提高了代码的复用性(降低对象与对象之间的代码使用的是静态变量)

解释:
1、在主类中创建子类对象,会先调用父类无参构造函数(有参构造不调用),再调用子类构造函数。
2、子类的构造函数调用依据创建对象时传入的参数情况。

单继承:
一个类只能有一个直接的父类。不允许多继承。但支持多层继承(A extends B extends C)

二、super 关键字:

super代表的是父类空间引用。
作用:
1、子父类存在同名的成员(变量、方法),默认访问的是子类成员,可使用super关键字访问父类成员。
2、创建子类对象时,会默认调用父类的无参构造,可使用super调用指定的父类构造。

super 调用父类的构造时要注意的事项:
1、如果在子类的构造上没有指定调用父类的构造,那么java编译器会在子类的构造中加上super() 调用父类无参的构造。
2、super 调用父类构造函数时,该语句必须是子类构造函数中的第一个语句。
3、super 和 this 不能同时出现在同一个构造函数中调用其他的构造函数(都需要是构造函数的第一行);

super、this 的区别:
1、代表的事物不一致:

  • this:代表的是所属函数的调用者对象。
  • super:代表的是父类空间引用。

2、使用前提:

  • this:本类中。
  • super:存在继承关系的子父类中,子类使用。

3、调用构造函数的区别:

  • this:调用本类的构造函数。
  • super:调用父类的构造函数。

instanceof:
比较运算符,判断一个对象是否属于指定的类别。
使用前提:判断的对象与指定的类别必须存在继承或实现的关系

// 父类
public class Person {
    private String id;
    private String name;
    public Person() { }
    public Person(String id, String name) {
        this.id = id;
        this.name = name;
    }
}
// 子类
public class Student extends Person {
    private int age;
    public Student(){
        super();
    }
}

public static void main(String[] args) {
    Student student = new Student();
    System.out.println(student instanceof Student); // true
    System.out.println(student instanceof Person);  // true
}

三、final:

final关键字主要用于修饰类、类成员、方法、以及方法的形参。

修饰范围 备注
不能被继承,方法还可以调用,不可以重写。String类是final的。Integer类也是final的,防止代码功能被重写,该类没有必要进行扩展
变量 相当于一个常量,
方法 子类不能重写,可以继承过来使用,调用方式不变
形参 在该形参所属的方法中不能修改该形参

使用:
1、final修饰一个基本类型变量时,该变量不能重新赋值,第一次的值即为最终的值。

// 修饰成员属性
public static final double PI = 3.14;
1:public :访问权限最大
2:static :内存中只有一份
3:final  :是一个常量
4:常量名大写
5:必须初赋值。

2、final 修饰一个引用类型变量时,该变量不能重新指向新的对象。(地址值不可以改变,但对象中的属性值可以改变)

public static void main(String[] args) {
    final Person user = new Person();
    user = new Person("1","ron"); 
    // user 变量又重新指向了新的对象,报错
}

3、常量一般被修饰为final,final 关键字一般和static关键字结合使用,可互换位置。
4、final修饰形参。项目中主要用于一些数据的函数。将未知变量声明为final的。增强数据的安全性。

    public static void main(String[] args) {
        String[] arr = { "how`s ", "it ", "going? ","Ron!" };
        print(arr);
    }
    public static void print(final String[] arr) {
        for (int x = 0; x < arr.length; x++) {
            System.out.println(arr[x]);
        }
    }

你可能感兴趣的:(Java基础)