abstract关键字和抽象类和抽象方法:
abstract关键字:只能修饰类和方法。
1、abstract修饰类:该类不能实例化。该类的作用是让子类继承,从而重写该类中的方法,从而实现多态。
2、abstract修饰方法:有抽象方法的类必为抽象类。该方法只有声明,没有参数和方法体。
▲abstract只能用来修饰方法和类,不能修饰变量、代码块、构造器;不能用来修饰private方法,static方法,final方法,final类。
▲抽象类中除了抽象方法其他可以包含和正常类一样的内容。
▲子类若全部重写抽象类中的抽象方法,该子类才不是抽象类,可以实例化。
▲子类若没有全部重写抽象类中的抽象方法,该子类还是抽象类。
类的匿名类和匿名对象:
非匿名类的对象:
匿名类的对象:
▲匿名类没有事先定义出来,它是在使用的时候才被定义的。
▲匿名类需要有继承关系。
接口:
接口的含义:有时必须从几个类中抽取出一些共同的行为特征,而它们之间又没有is-a的关系,仅仅是具有相同的行为特征。
接口内部成员的定义:
1、接口内部只可以定义全局常量(都由public static final修饰,但可以省略 public static final ,只保留“类型 变量”),抽象方法(都由public abstract修饰,但可以省略“ public abstract” 或“abstract”,只保留“返回值 方法名(形参);”或“public 返回值 方法名(形参);”),静态方法和default方法。
2、接口中不能定义构造器,所以自身也不能实例化。
▲接口interface和类class是并列关系或者可以理解为一种特殊的类。从本质上讲,接口是一种特殊的抽象类。
▲开发中,让实现类去实现(而非继承)接口。若实现类全部重写接口中的抽象方法,该类才不是抽象类,可以实例化;若实现类没有全部重写接口中的抽象方法,该类还是抽象类。
▲java类可以实现多个接口,弥补了java的单继承性。
格式:class AA extends BB implements CC,DD,EE{
}
▲接口和接口之间可以继承,包括多继承。
▲与继承关系类似,接口与实现类之间存在多态性。接口的主要用途就是被实现类实现。
▲接口实际上是一种规范。
▲接口中定义的静态方法有执行语句,只能自己调用,不能由实现类对象调用。这条也适用于非接口,普遍性。
▲接口中的default方法也有执行语句,可以被实现类实现,重写,调用。
▲若父类和接口中有同名属性,在子类(或实现类)中必须显式区分(super.属性或接口.属性)
▲类优先原则:
定义:如果子类(或实现类)继承了父类且实现了接口,父类和接口中有同名同参数的默认方法,若子类中不重写该方法,则默认调用的是父类中的方法。(之所以规定是默认方法是因为如果是同名同参数抽象方法,因为子类或实现类必须要重写抽象方法,所以起作用的还是在子类或实现类中,没必要讨论)
接口冲突:
定义:如果实现类实现了多个接口,接口和接口中有同名同参数的默认方法,若子类中不重写该方法,则报错。
▲如果子类中重写了父类或 接口中的某个默认方法,则:①若要在子类中调用父类该默认方法,用“super.方法名(形参)”。②若要在实现类中调用接口中的默认方法,可以通过“接口名.super.方法名(形参)”。
创建接口的非匿名实现类对象:
匿名实现类对象:
接口的应用:
1、代理模式
2、工厂模式