接口是java语言中的一种引用类型是方法的集合.如果说类中封装了成员变量\成员方法\构造方法,那么接口中主要封装了方法.包含抽象方法(jdk7及以前),默认方法和静态方法(jdk8),私有方法(jdk9).
接口用interface关键字,也会被编译成.class文件
接口不能创建对象,但可以被实现(implements),实现接口的子类必须实现接口的所有抽象方法,创建对象就可以调用方法了,否则该子类必须是抽象类
接口中含有抽象方法,默认方法和静态方法,私有方法和私有静态方法
接口的抽象方法用abstract关键字修饰(抽象类及抽象类中抽象方法的abstract不可以省略),可以省略,供子类实现使用
接口的默认方法用default修饰,不可省略,供子类调用或子类重写
接口的静态方法用static修饰,供接口直接调用
接口的私有方法用private修饰,供接口的默认方法或静态方法调用
类与接口的关系为实现关系,即类实现接口.该类可以称为接口的实现类也可以称为接口的子类.实现的动作类似于继承,但关键字不同,用implements
非抽象子类实现接口,必须重写接口所有的抽象方法,继承接口的默认方法可以直接调用也可以重写
接口的默认方法可以继承也可以重写,但只能由接口的实现类的对象来调用
接口静态方法与.class文件相关,只能被接口直接调用,不能被接口的实现类类名及对象调用
接口的私有方法,只有接口的默认方法可以调用.
接口的私有静态方法,可以被接口的默认方法及静态方法调用
如果一个接口中有多个默认方法,并且方法中有重复内容,那么可以抽取出来封装到一个私有方法中,供默认方法调用.从设计的角度讲,私有方法是对默认方法和静态方法的辅助
接口可以多实现,一个类可以继承一个父类并实现多个接口.实现的多个接口之间用逗号隔开
接口中有多个抽象方法的,实现类必须重写所有的抽象方法,抽象方法有重名的,只需重写一次
接口中有多个默认方法的,实现类都可以继承使用,如果默认方法有重名的,必须重写一次
实现的多个接口中静态方法重名的,并不影响,因为只能用接口名来调用静态方法
优先级问题:当一个类继承了一个父类又实现了多个接口,父类的成员方法和接口中的默认方法重名的,会就近选择执行父类的成员方法
一个接口能继承另外一个或多个接口(extends),如果继承的接口之间默认方法有重名的,那么子接口需要将该方法必须重写一次
子接口重写默认方法时default关键字需要保留,子类重写接口默认方法时default关键字不能保留
接口中没有构造方法,不能创建对象
接口中没有静态代码块
接口中无法定义成员变量,但可以定义常量,默认用public static final 修饰
多态:同一种事物具有多种不同的表现形式
多态的前提:1.必须有继承或实现 2.必须有方法的重写 3.必须有父类(接口)的引用指向子类的对象
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有会编译报错,如果有执行的是子类重写后的方法.
实际开发过程中,父类类型作为方法的形式参数,传递给方法的是子类对象,进行方法的调用,更能体现出多态的扩展性了便利性
多态可以使程序写的更简单并具有良好的扩展性
多态的转型分为向下转型和向上转型两种
向上转型:多态本身就是子类类型向父类类型向上转型的过程,该过程是默认的
当父类引用指向子类对象时就是向上转型
向下转型:父类类型向子类类型向下转换的过程,该过程是强制的
在多态中想要调用子类特有的方法必须向下转型
ClassCastException类型转换异常
instanceOf关键字 来判断一个对象是否属于某个类的实例 a instanceOf Cat 属于返回TRUE 不属于返回FALSE