Java接口操作(继承父类并实现多个接口)

/*

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

1. 接口是没有静态代码块或者构造方法的。 2. 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。

格式:

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

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

A接口

package cn.itcast.day10.demo02; 
public interface MyInterfaceA {
 
  // 错误写法!接口不能有静态代码块
//  static {
//
//  }
 
  // 错误写法!接口不能有构造方法
//  public MyInterfaceA() {
//
//  }
 
  public abstract void methodA();
 
  public abstract void methodAbs();
 
  public default void methodDefault() {
    System.out.println("默认方法AAA");
  } 
}

B接口

package cn.itcast.day10.demo02; 
public interface MyInterfaceB {
 
  // 错误写法!接口不能有静态代码块
//  static {
//
//  }
 
  // 错误写法!接口不能有构造方法
//  public MyInterfaceA() {
//
//  }
 
  public abstract void methodB();
 
  public abstract void methodAbs();
 
  public default void methodDefault() {
    System.out.println("默认方法BBB");
  } 
}

实现类有多个接口

package cn.itcast.day10.demo02; 
public class MyInterfaceImpl /*extends Object*/ 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接口都有的抽象方法");
  }  // A B 都有 覆盖一次
 
  @Override
  public void methodDefault() {
    System.out.println("对多个接口当中冲突的默认方法进行了覆盖重写");
  }
}

只覆盖重写了一次。

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

package cn.itcast.day10.demo02; 
public abstract class MyInterfaceAbstract implements MyInterfaceA, MyInterfaceB {
  @Override
  public void methodA() {
 
  }
  // 没有写methodB那么实现类是抽象类
  @Override
  public void methodAbs() {
 
  }
 
  @Override
  public void methodDefault() {
 
  } 
}

抽象方法methodB没有重写覆盖,那么实现类成为了抽象类。

5. 如果实现类锁实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写(A,B两个接口中都写了默认方法,冲突了)。见3.中实现类中覆盖重写了A,B中的两个默认方法

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

Fu类

package cn.itcast.day10.demo02; 
public class Fu {
 
  public void method() {
    System.out.println("父类方法");
  } 
}

MyInterface接口

package cn.itcast.day10.demo02; 
public interface MyInterface {
 
  public default void method() {
    System.out.println("接口的默认方法");
  } 
}

直接父类当中的方法,和接口当中的默认方法产生了冲突。

Zi子类

package cn.itcast.day10.demo02; 
public class Zi extends Fu implements MyInterface {
}

调用method方法,看哪个优先

package cn.itcast.day10.demo02; 
public class Demo01Interface {
 
  public static void main(String[] args) {
    Zi zi = new Zi();
    zi.method();
  } 
}

调用子类对象的method方法,发现使用的是父类中的而不是接口中的方法,父类的优先级比接口优先级更高。

运行结果:

父类方法

Process finished with exit code 0

*/

补充知识:java从对象开始(类,父类与继承,抽象,接口)

1、对象(类class)

在程序设计时,我们往往会接触到各种形形色色的现实已存在的对象,这些对象都是需要我们在程序中实例化出来进行业务操作的。不过从数量和复杂上讲可以说比我们现实中接触的事物是有过之而无不及的。

2、父类与继承

当对象类型繁杂数量繁多时我们就会像生物学上对各种生物进行分门别类,对我们收集到的对象以属性或者功能又或者其他标准进行分类目。而这些我们最终分出来的各种类目往往在程序中被定义为父类,它是对我们收集到的对象中某些具有相同属性或者功能又或者其他相似特征的对象集合的总称。好似一个包含各种文件的文件夹,它本身在程序中并无任何业务操作的意义。

Java接口操作(继承父类并实现多个接口)

扫一扫手机访问