量化接口,接口是常量值和方法定义的集合。量化接口,接口是一种特殊的抽象类。
java类是单继承的。classBExtendsclassA
不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承那一个呢?
但量化接口,接口不存在这样的问题,量化接口,接口全都是抽象方法继承谁都无所谓,所以量化接口,接口可以继承多个量化接口,接口。
注意:
一个类如果实现了一个量化接口,接口,则要实现该量化接口,接口的所有方法。
方法的名字、返回类型、参数必须与量化接口,接口中完全一致。如果方法的返回类型不是void,则方法体必须至少有一条return语句。
因为量化接口,接口的方法默认是public类型的,所以在实现的时候一定要用public来修饰。
java中量化接口,接口之间的继承
最近在读一些源码的时候突然发现了一个很神奇的东西,它的原始形态是这样的:
在这行代码中,BlockingDeque、BlockingQueue和Deque是三个量化接口,接口。刚发现这个问题时,我是十分吃惊的,因为即使在《ThinkinginJava》中也没有提到量化接口,接口之间的继承。所以我立即把这个疑问提交到了stackoverflow上面。
这个问答的过程十分简单,在这个链接上面的:http://stackoverflow.com/questions/22498245/one-uncertainty-on-multiple-inheritance-in-universal-image-loader
#########################################
正如在stackoverflow上面所讨论的一样,一个类只能extends一个父类,但可以implements多个量化接口,接口。java通过使用量化接口,接口的概念来取代C++中多继承。与此一个量化接口,接口则可以同时extends多个量化接口,接口,却不能implements任何量化接口,接口。因而,Java中的量化接口,接口是支持多继承的。
然后我又做了个实验,来验证如果多个父子量化接口,接口中有多个相同的方法声明,然后在实现这个最终的量化接口,接口的时候,相同的方法声明在实现的时候会不会有冲突呢?
首先写了个量化接口,接口:TestInterfacejava:
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 }
注意,里面声明了三个方法和一个变量;
然后再与了一个量化接口,接口:TestInterfacejava:
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 }
里面也声明了三个方法和一个变量;
然后再定义了一个量化接口,接口InterfaceMultiInheritancjava同时继承了量化接口,接口TestInterfacejava和量化接口,接口TestInterfacejava:
1 package com.peter.java.dsa.interfaces;
2
3 public interface InterfaceMultiInheritance extends TestInterfaceA,
4 TestInterfaceB {
5 int num = 1024;
6
7 double pide(int x, int y);
8
9 int get();
10 }
里面声明了两个方法和一个变量;
注意,在这三个量化接口,接口中,有一个共同的方法声明:get()。这个都是要讨论的主题。
最后在一个类InterfaceImplementTest.java中实现了量化接口,接口InterfaceMultiInheritancjava,源码如下:
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 pide(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要实现而冲突。如果删除了量化接口,接口InterfaceMultiInheritancjava中的get方法,也只有一个get方法得到了实现并且没有为多个get要实现而出现什么冲突。
我们可以得到一个结论,当编译器在实现量化接口,接口的时候会依然检查量化接口,接口InterfaceMultiInheritancjava、TestInterfacejava和TestInterfacejava中的方法声明,如果后两者有与前者相冲突的方法声明,编译器将只要求类实现前者的声明,而后两者中相同的方法声明将自动被忽略。而当只有后两者中有相同的方法声明时,编译器将实现其中的一个即可。就好像是编译器中有一个专门存储方法声明的Set一样,在有继承关系的量化接口,接口中,只保存一次相同的方法声明。
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要实现而冲突。如果删除了量化接口,接口InterfaceMultiInheritancjava中的get方法,也只有一个get方法得到了实现并且没有为多个get要实现而出现什么冲突。
我们可以得到一个结论,当编译器在实现量化接口,接口的时候会依然检查量化接口,接口InterfaceMultiInheritancjava、TestInterfacejava和TestInterfacejava中的方法声明,如果后两者有与前者相冲突的方法声明,编译器将只要求类实现前者的声明,而后两者中相同的方法声明将自动被忽略。而当只有后两者中有相同的方法声明时,编译器将实现其中的一个即可。就好像是编译器中有一个专门存储方法声明的Set一样,在有继承关系的量化接口,接口中,只保存一次相同的方法声明。
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点