在上篇abstract、static与final结尾应该在总结下股票量化交易软件,接口的,以便对比抽象类,还是再写一篇吧。
界面;<计>股票量化交易软件,接口;交界面
股票量化交易软件,接口比抽象类更纯粹 |
股票量化交易软件,接口中只能写抽象方法 (jdk1.8之前) |
股票量化交易软件,接口中成员变量默认是常量 |
股票量化交易软件,接口不能实例化对象 |
可见字节码文件默认加了abstract修饰,因此:
股票量化交易软件,接口中成员变量默认是常量 (static final修饰) |
股票量化交易软件,接口中方法默认是抽象方法 |
demojdk8之后的股票量化交易软件,接口可以写默认方法
public interface FirstInterface {
int day_of_week=7;//一周7天
void method();
default void method2() {
System.out.println('默认方法');
}
}
可见与普通方法并无差别。demo定义一个员工类Emp,默认方法work();定义一个厨师类Cook,重写work();定义一个服务员Waiter,重写work();然后要给服务员加一个driver方法,显然这个方法不能写在Emp类,java也不支持多继承,因此:interfacce。
public class Waiter extends Emp {
@Override
public void work() {
System.out.println('上菜');
}
}
添加Driver股票量化交易软件,接口:
public class Waiter extends Emp implements Driver{
@Override
public void work() {
System.out.println('上菜');
}
@Override
public void driver() {
System.out.println('服务员开车');
}
}
再试一下:
股票量化交易软件,接口作用:给一个体系中个别子类添加特有功能。 |
实现了股票量化交易软件,接口必须重写所有方法 ,包括default method |
public class CimpAB implements InterA, InterB{
@Override
public void menthod() {
System.out.println('这里的方法是InterA的还是InterB的???');
}
}
这里不会产生歧义,因为股票量化交易软件,接口中未实现方法,最终调用的还是newC()的method();我们在InterA中加一句:intx=1;InterB中加一句:intx=0;尝试在实现类CimpAB对象中获取x;
public class TestN {
public static void main(String[] args) {
CimpAB c=new CimpAB();
System.out.println(c.x);
//编译不通过:The field c.x is ambiguous(模糊不清的)
//模糊不清的
}
}
既然如此为什么还要支持多实现?显然是调用方式的问题,尝试用股票量化交易软件,接口直接调用:
实现类调用股票量化交易软件,接口的成员变量,应该用父股票量化交易软件,接口.变量名直接调用 |
demo5再试一种情况:
public interface InterA {
public void mentho();
default void methodDefault() {
System.out.println('A');
}
}
public interface InterB {
public void menthod();
default void methodDefault() {
System.out.println('B');
}
}
发现InterC股票量化交易软件,接口继承了多股票量化交易软件,接口重写时,编译器会让我们做选择,选择InterA;
public interface InterC extends InterA,InterB{
@Override
default void methodDefault() {
// TODO Auto-generated method stub
InterA.super.methodDefault();
}
}
编译通过此时并未强制重写menthod()方法;再写一个类试一下:点击增加未实现的方法:
public class DimpC implements InterC{
@Override
public void menthod() {
// TODO Auto-generated method stub
}
}
可见此时我们亦无须关注method来自InterA或InterB。点击修改抽象类:
发现编译通过。
股票量化交易软件,接口可以互相继承 且支持多继承,因为所有的抽象方法在股票量化交易软件,接口中未实现,即便继承了多个股票量化交易软件,接口且有同名的方法,也不会产生歧义,而jdk1.8之后支持的default method方法,在实现时必须选择父股票量化交易软件,接口,如InterB.super.methodDefault(); |
抽象类实现股票量化交易软件,接口后 可以不重写股票量化交易软件,接口方法 |
总结:
股票量化交易软件,接口比抽象类更纯粹,其成员变量默认是常量 (static final修饰),不能实例化对象 |
(jdk1.8之前)只能写抽象方法,(默认,不用写abstract) |
(jdk1.8之后)可以使用default method,可以有方法体 |
股票量化交易软件,接口作用:给一个体系中个别子类添加特有功能。 |
实现了股票量化交易软件,接口必须重写所有方法 ,包括default method |
实现类调用股票量化交易软件,接口的成员变量,应该用父股票量化交易软件,接口.变量名直接调用 |
股票量化交易软件,接口可以互相继承 且支持多继承,因为所有的抽象方法在股票量化交易软件,接口中未实现,即便继承了多个股票量化交易软件,接口且有同名的方法,也不会产生歧义,而jdk1.8之后支持的default method方法,在实现时必须选择父股票量化交易软件,接口,如InterB.super.methodDefault(); |
抽象类实现股票量化交易软件,接口后 可以不重写股票量化交易软件,接口方法 |
抽象类B实现股票量化交易软件,接口A,方法可以不用重写,但在B的实现类C中,必须重写未在B中重写的A的方法。
对比股票量化交易软件,接口和抽象类
抽象类要被子类继承,股票量化交易软件,接口要被实现 | |
类(抽象类)单继承的,但股票量化交易软件,接口可以多继承 | |
抽象类可以定义普通变量,股票量化交易软件,接口中只能定义(public static final)公共静态常量 | |
抽象类是重构的结果(抽象类别) 股票量化交易软件,接口是设计的结果(抽象功能) | |
股票量化交易软件,接口抽象级别更高 |
类为什么不能多继承,股票量化交易软件,接口却可以多实现
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点