• Java中接口之间的继承


          本文由广州疯狂软件java培训分享:

      正如在stackoverflow上面所讨论的一样,一个类只能extends一个父类,但可以implements多个接口。java通过使用接口的概念来取代C++中多继承。与此同时,一个接口则可以同时extends多个接口,却不能implements任何接口。因而,Java中的接口是支持多继承的。

      然后我又做了个实验,来验证如果多个父子接口中有多个相同的方法声明,然后在实现这个最终的接口的时候,相同的方法声明在实现的时候会不会有冲突呢?

      首先写了个接口:TestInterfaceA.java:

      复制代码

      1 package com.peter.java.dsa.interfaces;

      2

      3 public interface TestInterfaceA {

      4 String pri_key = "guess what the private key is";

      5

      6 int add(int x, int y);

      7

      8 String encryt(byte[] result);

      9

      10 int get();

      11 }

      复制代码

      注意,里面声明了三个方法和一个变量;

      然后再与了一个接口:TestInterfaceB.java:

      复制代码

      1 package com.peter.java.dsa.interfaces;

      2

      3 public interface TestInterfaceB {

      4 String pub_key = "guess what the public key is";

      5

      6 int minus(int x, int y);

      7

      8 byte[] decryt(String src);

      9

      10 int get();

      11 }

      复制代码

      里面也声明了三个方法和一个变量;

      然后再定义了一个接口InterfaceMultiInheritance.java同时继承了接口TestInterfaceA.java和接口TestInterfaceB.java:

      1 package com.peter.java.dsa.interfaces;

      2

      3 public interface InterfaceMultiInheritance extends TestInterfaceA,

      4 TestInterfaceB {

      5 int num = 1024;

      6

      7 double divide(int x, int y);

      8

      9 int get();

      10 }

      里面声明了两个方法和一个变量;

      注意,在这三个接口中,有一个共同的方法声明:get()。这个都是要讨论的主题。

      最后在一个类InterfaceImplementTest.java中实现了接口InterfaceMultiInheritance.java,源码如下:

      1 package com.peter.java.dsa.common;

      2

      3 import com.peter.java.dsa.interfaces.InterfaceMultiInheritance;

      4 import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;

      5 import com.sun.org.apache.xml.internal.security.utils.Base64;

      6

      7 public class InterfaceImplementTest implements InterfaceMultiInheritance {

      8

      9 @Override

      10 public int add(int x, int y) {

      11 // TODO Auto-generated method stub

      12 return x + y;

      13 }

      14

      15 @Override

      16 public String encryt(byte[] result) {

      17 // TODO Auto-generated method stub

      18 return Base64.encode(result);

      19 }

      20

      21 @Override

      22 public int minus(int x, int y) {

      23 // TODO Auto-generated method stub

      24 return x - y;

      25 }

      26

      27 @Override

      28 public byte[] decryt(String src) {

      29 // TODO Auto-generated method stub

      30 try {

      31 return Base64.decode(src);

      32 } catch (Base64DecodingException e) {

      33 // TODO Auto-generated catch block

      34 e.printStackTrace();

      35 }

      36 return null;

      37 }

      38

      39 @Override

      40 public double divide(int x, int y) {

      41 // TODO Auto-generated method stub

      42 return x/y;

      43 }

      44

      45 @Override

      46 public int get() {

      47 // TODO Auto-generated method stub

      48 return num;

      49 }

      50

      51 public void print() {

      52 System.out.println("The public key is: "+pub_key+" The private key is:

      "+pri_key);

      53 }

      54

      55 }

      复制代码

      在这个类中,只有一个get方法实现了,同时也没有为有多个get要实现而冲突。同时,如果删除了接口InterfaceMultiInheritance.java中的get方法,也只有一个get方法得到了实现并且没有为多个get要实现而出现什么冲突。

      所以,我们可以得到一个结论,当编译器在实现接口的时候会依然检查接口InterfaceMultiInheritance.java、TestInterfaceA.java和TestInterfaceB.java中的方法声明,如果后两者有与前者相冲突的方法声明,编译器将只要求类实现前者的声明,而后两者中相同的方法声明将自动被忽略。而当只有后两者中有相同的方法声明时,编译器将实现其中的一个即可。就好像是编译器中有一个专门存储方法声明的Set一样,在有继承关系的接口中,只保存一次相同的方法声明。

      疯狂软件教育中心依托开发团队的强大技术实力,把企业最新技术融入实训课程,打造金牌的品质,才能给予学员黄金的未来,疯狂软件凭借过硬的技术实力与丰富的项目开发经验,赢得了社会的肯定。疯狂软件Java培训师资力量强大,课程内容深入,为学员高薪就业做了很好的铺垫,拥有丰富就业指导经验的就业团队也成为了学员高薪就业的先天优势。地址:广州天河区车陂沣宏大厦3楼。

  • 相关阅读:
    dp uva1025
    dp uva10003
    dp最优矩阵相乘poj1651
    dp uva11584
    动态规划uva11400
    流形学习 (Manifold Learning)
    tf.nn.embedding_lookup
    word2vec
    word2vec 细节解析1
    collections-Counter
  • 原文地址:https://www.cnblogs.com/gojava/p/3617304.html
Copyright © 2020-2023  润新知