接口
接口就是多个类的公共规范
接口是一种引用数据类型,最重要的内容就是其中的:抽象方法
| 12
 3
 4
 
 | public interface 接口名称{
 }
 
 
 | 
如果是Java7,那么接口中可以包含的内容有:
- 常量 
- 抽象方法 
如果是Java 8,还可以额外包含有:
- 默认方法 
- 静态方法 
如果是Java 9,还可以额外包含有:
接口使用步骤:
- 接口不能直接使用,必须有一个“实现类”来“实现”接口。
格式:
| 12
 3
 
 | public class 实现类名称 implements 接口名称{
 }
 
 | 
- 接口的实现类必须覆盖重写(实现)接口中所有的抽象方法。
实现:去掉abstract关键字,加上方法体大括号。
注意事项:
如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是抽象类。
接口的定义
 接口:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 | package com.tipdm.Demo01;
 
 
 
 
 
 
 
 
 
 
 public interface MyInterfaceAbstract {
 
 
 public abstract void methodAbs1();
 
 
 abstract void methodAbs2();
 
 
 public void methodAbs3();
 
 
 void methodAbs4();
 }
 
 | 
接口实现类:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 
 | package com.tipdm.Demo01;
 public class MyInterfaceAbstractImpl implements MyInterfaceAbstract{
 
 @Override
 public void methodAbs1() {
 System.out.println("这是第1个方法");
 }
 
 @Override
 public void methodAbs2() {
 System.out.println("这是第2个方法");
 
 }
 
 @Override
 public void methodAbs3() {
 System.out.println("这是第3个方法");
 
 }
 
 @Override
 public void methodAbs4() {
 System.out.println("这是第4个方法");
 
 }
 }
 
 | 
主类:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 
 | package com.tipdm.Demo01;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 public class demo1 {
 public static void main(String[] args) {
 
 
 MyInterfaceAbstractImpl myInterfaceAbstract = new MyInterfaceAbstractImpl();
 myInterfaceAbstract.methodAbs1();
 myInterfaceAbstract.methodAbs2();
 myInterfaceAbstract.methodAbs3();
 myInterfaceAbstract.methodAbs4();
 }
 }
 
 | 
| 12
 3
 4
 5
 6
 
 | 这是第1个方法这是第2个方法
 这是第3个方法
 这是第4个方法
 
 进程已结束,退出代码0
 
 | 
接口的默认方法
- 接口的默认方法,可以通过接口实现类对象,直接调用。
- 接口的默认方法,也可以被接口实现类进行覆盖重写。
接口:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | package com.tipdm.Demo02;
 
 
 
 
 
 
 
 
 
 public interface MyInterfaceDefault {
 
 
 public abstract void methodAbs();
 
 
 
 
 
 public default void methodDefault(){
 System.out.println("这是新添加的默认方法");
 }
 
 }
 
 | 
接口的实现类A:
| 12
 3
 4
 5
 6
 7
 8
 
 | package com.tipdm.Demo02;
 public class MyInterfaceDefaultA implements MyInterfaceDefault{
 @Override
 public void methodAbs() {
 System.out.println("实现了抽象方法!AAAAAA");
 }
 }
 
 | 
接口的实现类B:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | package com.tipdm.Demo02;
 public class MyInterfaceDefaultB implements MyInterfaceDefault{
 @Override
 public void methodAbs() {
 System.out.println("实现了抽象方法!BBBB");
 }
 
 @Override
 public void methodDefault() {
 System.out.println("实现类B覆盖重写了接口的默认方法");
 }
 }
 
 | 
主类:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | package com.tipdm.Demo02;
 
 
 
 
 public class demo1 {
 public static void main(String[] args) {
 
 MyInterfaceDefaultA a = new MyInterfaceDefaultA();
 a.methodAbs();
 a.methodDefault();
 
 
 MyInterfaceDefaultB b = new MyInterfaceDefaultB();
 b.methodAbs();
 b.methodDefault();
 }
 }
 
 | 
| 12
 3
 4
 5
 6
 
 | 实现了抽象方法!AAAAAA这是新添加的默认方法
 实现了抽象方法!BBBB
 实现类B覆盖重写了接口的默认方法
 
 进程已结束,退出代码0
 
 | 
接口的静态方法
接口:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | package com.tipdm.Demo03;
 
 
 
 
 
 
 
 
 public interface MyInterfaceStatic {
 public static void methodStatic() {
 System.out.println("这是接口的静态方法!");
 }
 }
 
 | 
接口实现类:
| 12
 3
 4
 
 | package com.tipdm.Demo03;
 public class MyInterfaceStaticImpl implements MyInterfaceStatic{
 }
 
 | 
主类:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | package com.tipdm.Demo03;
 
 
 
 
 
 
 public class demo1 {
 public static void main(String[] args) {
 
 
 
 
 
 
 
 MyInterfaceStatic.methodStatic();
 }
 }
 
 | 
接口的私有方法
接口A:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 
 | package com.tipdm.Demo04;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 public interface MyInterfacePrivateA {
 public default void methodDefault1(){
 System.out.println("默认方法1");
 method();
 }
 
 public default void methodDefault2(){
 System.out.println("默认方法2");
 method();
 }
 
 
 private void method() {
 System.out.println("AAA");
 System.out.println("BBB");
 System.out.println("CCC");
 }
 }
 
 | 
接口B:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | package com.tipdm.Demo04;
 public interface MyInterfacePrivateB {
 public static void methodDefault1(){
 System.out.println("静态方法1");
 methodStaticCommon("AAA", "BBB", "CCC");
 }
 
 public static void methodDefault2(){
 System.out.println("静态方法2");
 methodStaticCommon("AAA", "BBB", "CCC");
 }
 
 
 private static void methodStaticCommon(String aaa, String bbb, String ccc) {
 System.out.println(aaa);
 System.out.println(bbb);
 System.out.println(ccc);
 }
 }
 
 | 
接口的实现类:
| 12
 3
 4
 5
 6
 7
 8
 
 | package com.tipdm.Demo04;
 public class MyInterfacePrivateImpl implements MyInterfacePrivateA{
 public void methodAnother(){
 
 
 }
 }
 
 | 
主类:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | package com.tipdm.Demo04;
 public class demo1 {
 public static void main(String[] args) {
 MyInterfacePrivateB.methodDefault1();
 MyInterfacePrivateB.methodDefault2();
 
 
 
 }
 }
 
 | 
接口中的成员变量
接口:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | package com.tipdm.Demo05;
 
 
 
 
 
 
 
 
 
 
 
 
 public interface MyInterfaceConst {
 
 public static final int NUM = 10;
 }
 
 | 
主类:
| 12
 3
 4
 5
 6
 7
 8
 
 | package com.tipdm.Demo05;
 public class demo1 {
 public static void main(String[] args) {
 
 System.out.println(MyInterfaceConst.NUM);;
 }
 }
 
 | 
一个类可以同时实现多个接口
使用接口的时候,需要注意:
- 接口是没有静态代码块或者构造方法的。 
- 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。 
格式:
| 12
 3
 
 | public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB{
 }
 
 | 
- 如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。 
- 如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。 
- 如果实现类所实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。 
- 一个类如果和直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类中的方法。 
接口A:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | package com.tipdm2.Demo01;
 public interface MyInterfaceA {
 
 
 
 
 
 
 
 public abstract void methodA();
 
 public abstract void methodAbs();
 
 public default void methodDefault(){
 System.out.println("AAAAA");
 }
 }
 
 | 
接口B:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | package com.tipdm2.Demo01;
 public interface MyInterfaceB {
 
 
 
 
 
 
 
 public abstract void methodB();
 
 public abstract void methodAbs();
 
 public default void methodDefault(){
 System.out.println("BBBBB");
 }
 }
 
 | 
接口实现类:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 | package com.tipdm2.Demo01;
 public class MyInterfaceImpl  implements MyInterfaceA, MyInterfaceB{
 @Override
 public void methodA() {
 System.out.println("覆盖重写了A方法!");
 }
 
 @Override
 public void methodB() {
 System.out.println("覆盖重写了B方法!");
 }
 
 @Override
 public void methodAbs() {
 System.out.println("覆盖重写了AB接口都有的抽象方法!");
 }
 
 @Override
 public void methodDefault() {
 System.out.println("重写AB接口默认方法");
 }
 
 }
 
 | 
主类:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | package com.tipdm2.Demo01;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 public class demo1 {
 public static void main(String[] args) {
 MyInterfaceImpl myInterface = new MyInterfaceImpl();
 myInterface.methodA();
 myInterface.methodB();
 myInterface.methodAbs();
 myInterface.methodDefault();
 }
 }
 
 | 
| 12
 3
 4
 5
 6
 
 | 覆盖重写了A方法!覆盖重写了B方法!
 覆盖重写了AB接口都有的抽象方法!
 重写AB接口默认方法
 
 进程已结束,退出代码0
 
 | 
一个类如果和直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类中的方法
接口:
| 12
 3
 4
 5
 6
 7
 
 | package com.tipdm2.Demo02;
 public interface MyInterface {
 public default void method(){
 System.out.println("接口当中的默认方法!");
 }
 }
 
 | 
父类:
| 12
 3
 4
 5
 6
 7
 
 | package com.tipdm2.Demo02;
 public class Fu {
 public void method(){
 System.out.println("父类中的方法!");
 }
 }
 
 | 
子类/方法实现类:
| 12
 3
 4
 
 | package com.tipdm2.Demo02;
 public class Zi extends Fu implements MyInterface{
 }
 
 | 
主类:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | package com.tipdm2.Demo02;
 
 
 
 public class demo1 {
 public static void main(String[] args) {
 Zi zi = new Zi();
 zi.method();
 }
 }
 
 | 
接口的多继承
父接口A:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | package com.tipdm2.Demo03;
 public interface MyInterfaceA {
 public abstract void methodA();
 
 public abstract void methodCommon();
 
 public default void methodDefault(){
 System.out.println("AAAA");
 }
 }
 
 | 
父接口B:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | package com.tipdm2.Demo03;
 public interface MyInterfaceB {
 public abstract void methodB();
 
 public abstract void methodCommon();
 
 public default void methodDefault(){
 System.out.println("BBBB");
 }
 }
 
 | 
子接口:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | package com.tipdm2.Demo03;
 
 
 
 
 
 
 
 
 public interface MyInterface extends MyInterfaceA, MyInterfaceB{
 public abstract void method();
 
 @Override
 default void methodDefault() {
 System.out.println("子接口默认方法");
 }
 }
 
 | 
接口实现类:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 | package com.tipdm2.Demo03;
 
 
 
 public class MyInterfaceImpl implements MyInterface{
 @Override
 public void method() {
 
 }
 
 @Override
 public void methodA() {
 
 }
 
 @Override
 public void methodB() {
 
 }
 
 @Override
 public void methodCommon() {
 
 }
 }
 
 | 
主类:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | package com.tipdm2.Demo03;
 
 
 
 
 
 
 
 
 
 public class demo1 {
 public static void main(String[] args) {
 MyInterfaceImpl myInterface = new MyInterfaceImpl();
 myInterface.method();
 myInterface.methodA();
 myInterface.methodB();
 myInterface.methodCommon();
 myInterface.methodDefault();
 }
 }
 
 | 
| 12
 3
 4
 5
 6
 7
 
 | 子接口方法!A接口方法
 B接口方法
 公共接口方法
 重写,子接口默认方法
 
 进程已结束,退出代码0
 
 |