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、父类与继承

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

不过注意的是在不同情形不同问题域下,由于分类标准不同,父类也会成为某个父类的子类,所以会形成一种树状关系结构,父类在关系结构中与其他对象类并无差别。

分类完成后,现在我们就可以以父类为标准来操作一类对象了。但这时我们对分类好的对象进行实例化会发现那些相同的属性功能或者其他相似特征都需要在其对象中重复编写,像这种程度的分类并不是我们想要的。

于是,我们又给父类赋予新的功能,它不再是单纯的对对象进行分类了。我们提取出相同的属性和功能特征放在父类中,让我们需要操作的对象仅仅关注自己特有的属性和功能特征,其余的属性和功能特征都可通过继承父类来拥有。这样我们就解决了相同属性功能重复编写的问题,并且还能对共有属性功能进行规范化操作。

3、抽象类

因为父类并无任何业务操作意义,我们就对各种父类进行管理为它们添加abstract关键词,让它们无法实例化,这样就避免了实例化对象是不正确的或者某些人分不清具体要操作哪些对象而实例化父类的问题。因为这些父类无法实例化,所以我们把它们称为——抽象类。通过这样的设定我们就会在程序中以抽象类为节点形成各种层级关系。

于是我们树状关系机构又变成了具有清晰层级关系的树状关系结构。

4、小结

父类的提出是进行归类操作,那么继承则是去重和规范化的操作,而抽象在此基础上又进行了关系的分层级和类对象实例化操作的规范。

5、接口

前面说我们对每个对象根据某种特征进行分类了,但有时我们会因为某些特有目的标准不一样,有时以属性分类有时以功能分类,但有些对象可能拥有相同属性不拥有相同功能,有些对象拥有相同功能不拥有相同属性。这时我们就会把这些在父类中没有的属性或者功能但其他对象又有相识功能或属性单独抽取出来作为接口来为这些对象服务。

从抽取相同属性或者功能这点来看,接口实则是对我们已分类好具有清晰层级的树状关系结构再次进行一次去重复操作,从而我们的对象从具有清晰层级的树状关系结构变成了更加灵活的网状形结构。

但是在提取父类分类时我们一般会以相同属性来进行分类,那么那些不同的功能会单独提取到接口中,接口和抽象类相似的是都不会进行具体方法功能的实现,只是将相同的功能申明好进行规范化操作。具体实现会具体到对象再进行实现。

对象进行去重再提取后那些因为在不同父类中具有相同功能的对象又以另外一种标准分类到某种接口中了。比如某某对象的某某功能和某某对象的某某功能都是来至于某某接口的。从而我们对对象进行操作又多了一种标准,可以通过判断是否具有某种功能进行筛选对象进其操作。

6、总结

从功能点上看接口与(抽象和父类和继承)的提出都是对我们程序中的对象进行归类操作,去除那些重复的代码。并且在接口和抽象类中都是可以对某些属性和方法功能进行规范化约束,从而我们在对对象进行业务操作中就更加便捷清晰。对象与对象的关系更加明朗。

以上这篇Java接口操作(继承父类并实现多个接口)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java单例模式继承覆盖多态原理详解

    1.单例模式: 1)提出原因 是由gof 也就是四人组提出来的.为了保证jvm中某一类型的java对象永远只有一个,同时也是为了节省内存的开销.因为外面程序可以通过new的方法直接调用类里面的构造方法.导致该类的对象不止一个. 2)定义 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. A.构造方法私有化: B.对外提供一个公开的.静态的.获取当前类型对象的方法 C.提供一个当前类型的静态变量. 3)分类 A.饿汉式单例

  • java中接口(interface)及使用方法示例

    1.接口:一种把类抽象的更彻底,接口里只能包含抽象方法的"特殊类".接口不关心类的内部状态数据,定义的是一批类所遵守的规范.(它只规定这批类里必须提供某些方法,提供这些方法就可以满足实际要求). 在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念.类描述对象的属性和方法.接口则包含类要实现的方法. 除非实现接口的类是抽象类,否则该类

  • java的继承原理与实现方法详解

    本文实例讲述了java的继承原理与实现方法.分享给大家供大家参考,具体如下: 继承 1.java中是单继承的.每个子类只有一个父类. 语法:子类 extends 父类 2.在java中,即使没有声明父类,也有一个隐含的父类,就是Object类 3.在子类中可以使用super来调用父类的方法 4.继承中的构造方法问题 在new一个子类实例的过程中,会优先自动调用父类默认的无参数构造方法,然后再调用子类的构造方法.如果父类没有默认的构造方法,只有带参数的构造方法,此时就会出错. 除了由jvm自动调用

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

    /* 使用接口的时候,需要注意: 1. 接口是没有静态代码块或者构造方法的. 2. 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口. 格式: public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB { // 覆盖重写所有抽象方法 } 3. 如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可. A接口 package cn.itcast.day10.demo02; public in

  • java中子类继承父类,程序运行顺序的深入分析

    我们经常在项目中使用继承,但是往往不太明白,程序运行的顺序以及原理,尤其是使用上转型对象的时候,以及父类子类中都有static变量和方法时,不知道先运行谁.我也是写了一个例子.总结了一下. 复制代码 代码如下: 父类:public class TestStatic { public static String name="china"; {       System.out.println("========方法体========");    } static{  

  • Java接口继承和使用接口操作示例

    本文实例讲述了Java接口继承和使用接口操作.分享给大家供大家参考,具体如下: 一 接口的继承 1 点睛 接口支持多继承,一个接口可以有多个父接口,子接口扩展某个父接口,将会获得父接口里定义的所有抽象方法.常量. 一个接口继承多个父接口时,多个父接口排在extends关键字之后. 2 代码 interface interfaceA { int PROP_A = 5; void testA(); } interface interfaceB { int PROP_B = 6; void testB

  • Java泛型的继承和实现操作示例

    本文实例讲述了Java泛型的继承和实现操作.分享给大家供大家参考,具体如下: 一 点睛 泛型类和泛型接口被定义后,是可以被继承和实现的. 二 泛型类的继承 1 代码 class A<E> { E t; } public class B<T,T1>extends A<T>{ public static void main(String[] args){ System.out.println("B test"); } } 2 运行 B test 3 说明

  • java实现多线程的两种方式继承Thread类和实现Runnable接口的方法

    实现方式和继承方式有什么区别呢? *区别: *继承Thread:线程代码存放在Thread子类run方法中 *实现Runnable:线程代码存放在接口的子类的run方法中 *实现方式的好处:避免了单继承的局限性 *在定义线程时,建议使用实现方式,当然如果一个类没有继承父类,那么也可以通过继承Thread类来实现多线程 *注意:Runnable接口没有抛出异常,那么实现它的类只能是try-catch不能throws *Java对多线程的安全问题提供了专业的解决方式就是同步代码块synchroniz

  • Java中的对象、类、抽象类、接口、继承之间的联系

    正文: 举个例子:如果现在要想定义一个动物,那么动物肯定是一个公共的标准,而这个公共标准就可以通过接口来完成. 在动物中又分为两类:哺乳动物.卵生动物,而这个标准属于对动物的标准进一步细化,应该称为子标准,所以此种关系可以使用接口的继承来表示. 而哺乳动物可以继续划分为人.狗.猫等不同的类型,由于这些类型不表示具体的事物标准,所以可以使用抽象类进行表示. 如果要表示出工人或者学生这样的概念,则肯定是一个具体的定义,则使用类的方式. 然后每个学生或者每个工人都是具体的,那么就通过对象来表示: 由下

  • 一篇文章带你了解java接口与继承

    目录 JAVA接口的概念 接口的代码实现 定义关键字:interface 实现 关键字: implements 举个列子 注意事项 Java继承 什么是继承: 总结 JAVA接口的概念 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 我的理解:在类中,方法是具体的,通过接口我们可以将具体的方法抽象化.比如在动物类中有吃的动作,不同的动物吃不同的食物,食肉食草等

  • Java中的接口多继承机制

    目录 问题原因 一个接口可以同时继承多个接口 接口不能实现任何接口 一个类可以实现多个接口 一个类只能继承一个父类 总结: 问题原因 今天在看集合源码的时候,突然看到接口继承接口,觉得有点差异,以前写代码也就是类继承一个类,实现接口.这样写的多了,突然看到接口继承接口就有点诧异了,以为哪里不对.就测试,查阅了一些资料 一个接口可以同时继承多个接口 书写接口测试 public interface Jiekou extends Jiekou1,Jiekou2{ void jiekou(); } pu

  • Java集合操作之List接口及其实现方法详解

    在介绍List接口之前,我们先来看看 Collection 接口,因为Collection接口是 List / Set / Queue 接口的父接口,List / Set / Queue 的实现类中很多的操作方法其实还是调用Collection类定义的方法. 一.Collection接口 在Collection接口中,定义了如下的方法: 其中方法可以分为以下几类: 数据操作类方法:add/addAll/remove/removeAll/clear/retainAll/iterator 判断类方法

  • Java基础教程之接口的继承与抽象类

    在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体.interface为类提供了接口规范. 在继承中,我们为了提高程序的可复用性,引入的继承机制.当时的继承是基于类的.interface接口同样可以继承,以拓展原interface. 接口继承 接口继承(inheritance)与类继承很类似,就是以被继承的interface为基础,增添新增的接口方法原型.比如,我们以Cup作为原interface: 复制代码 代码如下: interface Cup

随机推荐