🪂 接口的实现和方法引用
接口的实现: 接口无法实现接口但是可以继承接口或者类,类使用implements关键字实现接口,一个类可以实现多个接口使用逗号隔开。接口中定义了抽象方法,实现接口的类必须重写这个接口中的所有抽象方法(包括通过extends继承来的抽象方法),否则这个类就必须定义成抽象类
就近引用、类优先、接口冲突原则:
① 如果一个类的超类和超类的超类中定义了一个同名变量或者方法的话,由于就近原则这个类中引用的就是超类的变量或者方法,如果子类中也有的话就近调用子类的 ②类和接口是一个同一级的概念,如果一个类的超类和它实现的接口中定义一个同名变量,这就会导致这个类中变量的引用不明确而报错,但是如果是方法的话就默认类优先原则调用超类中的方法
③还有一种就是一个类实现多个接口中有同名变量或方法,由于接口冲突此时引用这个变量或者方法就会报错,需要重写该方法或者重定义该变量
总结来说同名情况下,多重继承变量方法都就近,一接口一超类变量报错、方法类优先,多实现接口冲突
🪂 为什么使用接口
可能有的小伙伴要问了,既然抽象类跟接口都可以定义抽象方法,它们的子类或者实现类也都必须实现这个抽象方法,那么为什么不直接使用抽象类,而是大费周折的再引入接口的概念呢?抽象类毕竟是个类,类的话就只能继承一个抽象超类,但是一个类可以实现无数多个接口,也就是说接口弥补了Java语言只能单继承的局限性。
接口的使用很广泛,比如想要实现序列化就要实现Serializable 接口,想要自定义对象的排序规则就要实现Comparable接口,重写CompareTo方法……