java继承父类并实现多个接口

java继承父类并实现多个接口

使用接口的时候,需要注意:

接口是没有静态代码块或者构造方法的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package cn.itcast.day10.demo02;

public interface MyInterfaceA {

// 错误写法!接口不能有静态代码块
// static {
//
// }

// 错误写法!接口不能有构造方法
// public MyInterfaceA() {
//
// }


}

一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。
格式:

1
2
3
public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB {
// 覆盖重写所有抽象方法
}

如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package cn.itcast.day10.demo02;

public abstract class MyInterfaceAbstract implements MyInterfaceA, MyInterfaceB {
@Override
public void methodA() {

}
//只需要覆盖重写一次
@Override
public void methodAbs() {

}

@Override
public void methodDefault() {

}


}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package cn.itcast.day10.demo02;

public interface MyInterfaceB {


public abstract void methodB();

public abstract void methodAbs();

public default void methodDefault() {
System.out.println("默认方法BBB");
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package cn.itcast.day10.demo02;

public interface MyInterfaceA {


public abstract void methodA();

public abstract void methodAbs();

public default void methodDefault() {
System.out.println("默认方法AAA");
}

}

如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。

1
2
3
4
5
package cn.itcast.day10.demo02;

public abstract class MyInterfaceAbstract implements MyInterfaceA, MyInterfaceB {
//不重写抽象方法
}

如果实现类锁实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。

1
2
3
4
5
6
7
8
9
10
package cn.itcast.day10.demo02;

public interface MyInterfaceA {


public default void methodDefault() {
System.out.println("默认方法AAA");
}

}
1
2
3
4
5
6
7
8
9
10
package cn.itcast.day10.demo02;

public interface MyInterfaceB {


public default void methodDefault() {
System.out.println("默认方法BBB");
}

}
1
2
3
4
5
6
7
8
9
10
11
package cn.itcast.day10.demo02;

public abstract class MyInterfaceAbstract implements MyInterfaceA, MyInterfaceB {
//重写默认方法
@Override
public void methodDefault() {

}


}

一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法。

1
2
3
4
5
6
7
8
9
package cn.itcast.day10.demo02;

public interface MyInterface {

public default void method() {
System.out.println("接口的默认方法");
}

}
1
2
3
4
5
6
7
8
9
package cn.itcast.day10.demo02;

public class Fu {

public void method() {
System.out.println("父类方法");
}

}
1
2
3
4
package cn.itcast.day10.demo02;

public class Zi extends Fu implements MyInterface {
}
1
2
3
4
5
6
7
8
9
10
11
12
package cn.itcast.day10.demo02;


public class Demo01Interface {

public static void main(String[] args) {
Zi zi = new Zi();
//这里调用的是父类的method方法
zi.method();
}

}