持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
接口的多继承【理解】
一个接口能继承另一个或者多个接口,这和类之间的继承比较相似。接口的继承使用 extends 关键字,子接口继承父接口的方法。如果父接口中的默认方法有重名的,那么子接口需要重写一次。 代码如下:
定义父接口:
interface A {
public default void method(){
System.out.println("AAAAAAAAAAAAAAAAAAA");
}
}
interface B {
public default void method(){
System.out.println("BBBBBBBBBBBBBBBBBBB");
}
}
定义子接口:
interface D extends A,B{
@Override
public default void method() {
System.out.println("DDDDDDDDDDDDDD");
}
}
小贴士:
子接口重写默认方法时,default关键字可以保留。
子类重写默认方法时,default关键字不可以保留。
小结:接口和接口之间是继承的关系,而不是实现。一个接口可以继承多个接口。
其他成员特点
- 接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。
- 接口中,没有构造方法,不能创建对象。
- 接口中,没有静态代码块。
接口和抽象类
抽象类:
本质是一个类class
抽象类有构造方法,抽象类我们不能创建对象
可以有抽象方法
接口:
本质是一个interface
接口没有构造方法,也不能创建对象
方法不加修饰符,自动就是抽象方法
接口的作用:
弥补了单继承的问题,因为接口可以同时实现多个
共同点:
接口和抽象类都要有子类。
抽象类和接口的综合案例
- 案例图:
-
用到的知识点:
类、抽象类、接口、继承、实现
-
代码实现:
//人类 public abstract class Person { //姓名 String name; //年龄 int age; //构造方法 public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } }
//运动员类
public abstract class Athlete extends Person {
//提供自己的构造方法
public Athlete() {
//super();
}
public Athlete(String name, int age) {
super(name, age);
}
//学习
public abstract void study();
}
//教练类
public abstract class Coach extends Person {
//编号
String id;
//空参构造
public Coach() {
}
//有参构造
public Coach(String name, int age, String id) {
//姓名和年龄赋值给父类
super(name, age);
//编号赋值给自己的成员变量
this.id = id;
}
//教学
//父类中不知道到底教啥 定义成抽象方法 在子类中自己重写
public abstract void teach();
}
//篮球运动员
public class BasketAthlete extends Athlete implements English{
//构造方法
public BasketAthlete() {
}
public BasketAthlete(String name, int age) {
super(name, age);
}
@Override
public void study() {
System.out.println(age +"岁的篮球运动员"+name + "在打篮球");
}
@Override
public void speakEnglish() {
System.out.println("篮球运动员出国说英语");
}
}
//篮球教练
public class BasketCoach extends Coach implements English{
//构造方法
public BasketCoach() {
}
public BasketCoach(String name, int age, String id) {
super(name, age, id);
}
@Override
public void teach() {
System.out.println("编号为" + id + "年龄为" + age + "姓名叫" + name + "的篮球教练教扣篮");
}
@Override
public void speakEnglish() {
System.out.println("篮球教练出国说英语");
}
}
public class FootAthlete extends Athlete {
//构造方法
public FootAthlete() {
}
public FootAthlete(String name, int age) {
super(name, age);
}
@Override
public void study() {
System.out.println(age + "岁的足球运动员" + name + "在踢足球");
}
}
//足球教练
public class FootCoath extends Coach {
//构造方法
public FootCoath() {
}
public FootCoath(String name, int age, String id) {
super(name, age, id);
}
@Override
public void teach() {
System.out.println("编号为" + id + "年龄为" + age + "姓名叫" + name + "的足球教练教射门");
}
}
//接口
public interface English {
//学英语(抽象方法)
void speakEnglish();
}
public class Demo测试类 {
public static void main(String[] args) {
//足球教练
FootCoath fc = new FootCoath("柳岩",20,"001");
//调用方法
fc.teach();
System.out.println("--------------");
//篮球运动员
BasketAthlete ba = new BasketAthlete("蔡徐坤",35);
ba.study();
ba.speakEnglish();
}
}
讲完抽象类和接口后,相信有许多同学会存有疑惑,两者的共性那么多,只留其中一种不就行了,这里就得知道抽象类和接口从根本上解决了哪些问题.
一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口, 接口弥补了Java的单继承
抽象类为继承体系中的共性内容, 接口为继承体系中的扩展功能
接口还是后面一个知识点的基础(lambada)