JavaSE第八天
一、继承之super关键字
super关键字:
-
一个引用变量,用于引用父类对象
-
父类和子类都具有相同的命名方法,要调用父类方法时使用
-
父类和子类都具有相同的命名属性,要调用父类中的属性时使用
-
super也是父类的构造函数,格式 super(参数),并且调用super() 必须是类构造函数中的第一条语句,否则编译不通过
注意:1、每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式(无参构造函数)的构造函数,那么在编译的时候就会报错
2、this()和super()都指的是对象,均不可以在static环境中使用,包括:static变量,static方法,static语句块。
构造函数里面的 super和this:
-
this 和super在构造函数中只能有一个,且都必须是构造函数当中的第一行
-
当父类的构造函数是无参构造函数时,在子类的构造函数中,不用显式super()去调用父类的构造函数,
-
当父类的构造函数是有参构造函数时,如果子类的构造函数中不写super()进行调用父类的构造函数,编译器会报错
二、抽象之abstract关键字
抽象:
-
当父类的某些方法不确定时,可以用abstract关键字来修饰该方法,即抽象方法,用abstract来修饰该类,即抽象类
-
抽象类将事物的共性的东西提取出来,由子类继承去实现,代码易扩展、易维护
抽象特点:
-
抽象类的特点
-
抽象类不能被实例化,因为抽象类中方法未具体化,这是一种不完整的类,所以不能直接实例化,编译无法通过
-
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
-
如果一个抽象类中可以没有抽象方法,这样做的目的是为了此类不能被实例化。
-
抽象类的子类必须给出抽象类中的抽象方法的具体实现,否则子类也是抽象类,需要用abstract声明
-
抽象类不能使用final关键字修饰,因为final修饰的类是无法被继承
-
-
抽象方法的特点
-
抽象类中的抽象方法只是声明,不包含方法体
-
抽象方法不能用private修饰,因为抽象方法必须被子类实现(覆写),而private权限对于子类来说是不能访问的
-
一个类继承了一个抽象类,那么它必须全部覆写抽象类中的抽象方法当然也可以不全部覆写
-
如果不覆写全部抽象方法则这个子类也必须是抽象类
-
-
构造方法,类方法(即static 修饰的方法)不能声明为抽象方法
三、接口之interface关键字
接口:
-
是抽象方法的集合,接口通常以interface来声明,一个类通过继承接口的方式,从而来继承接口的抽象方法
-
Java 8及以后,还可以包含默认方法和静态方法,不包含方法的实现
-
作用
-
解耦:接口定义了对象之间的契约,使得不同类之间的交互更加清晰和灵活。
-
多重继承:通过实现多个接口,一个类可以继承多个接口中的方法,实现类似多重继承的功能。
-
定义规范:接口定义了一组方法的集合,实现了该接口的类必须遵循这些方法的定义。
-
接口定义:接口使用interface
来定义,接口中的方法都是隐式抽象的(不需要abstract
关键字),且都是public
的(没有明确指定)。
接口实现:类可以使用implements
关键字来实现一个或多个接口;如果一个类实现了某个接口,那么它必须实现该接口中的所有抽象方法,除了默认方法和静态方法。
接口和抽象类区别:
1、抽象类可以有方法的具体实现,而接口中的方法都是抽象的(除了默认方法和静态方法)。
2、抽象类可以有构造方法,而接口不能有构造方法。
3、一个类只能继承一个抽象类,但可以实现多个接口。
4、接口主要用于定义规范,而抽象类主要用于代码的复用
四、InstanceOf关键字
InstanceOf 关键字:在Java中,instanceof
是一个运算符,用于测试对象是否是一个类的实例,或者对象的超类或接口的一个实例;且在运行时判断对象是否是一个类的实例,返回true
或false
。
注意:
1、使用instanceof
时,要确保对象引用变量不是null
,否则将会抛出NullPointerException
。
2、在使用instanceof
进行类型判断后,如果需要进行类型转换,应该使用强制类型转换(如(ClassName) obj
)。