java8的interface和abstract class
来源:互联网 发布:空间数据的逻辑运算 编辑:程序博客网 时间:2024/06/07 07:23
一:java8接口interface的变化
1. 在java8中接口可以有default方法和static方法。java8之前的接口中的方法全部默认为 public abstract method_name(),变量全部默认为public static final
default method in interface 默认方法
简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法。只需在方法名前面加个default关键字即可。
interface Drawable{ void draw(); default public void msg(){System.out.println("default method");} } class Rectangle implements Drawable{ public void draw(){System.out.println("drawing rectangle");} } class TestInterfaceDefault{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); d.msg(); }}
default方法是提交提供的一个默认实现,也可以像其他方法一样被继承。接口可以有多继承,当多个父接口中有相同签名的默认方法时,子实现类中需要以
<Interface接口名>.super.<method方法名>()的形式指定要调用哪个父接口中的方法
由于同一个方法可以从不同接口引入,自然而然的会有冲突的现象,默认方法判断冲突的规则如下:
1.一个声明在类里面的方法优先于任何默认方法(classes always win)
2.否则,则会优先选取最具体的实现,比如下面的例子 B重写了A的toOverride方法。
interface A{ void foo(); default void toOverride() { System.out.println("A"); }}interface B extends A{ default void toOverride() { A.super.toOverride(); System.out.println("B"); }}interface C extends B{ default void toOverride() { A.super.toOverride();// does not work B.super.toOverride(); System.out.println("B"); }}class D implements B{ public void toOverride() { } public void foo() { D.this.toOverride(); B.super.toOverride(); A.super.toOverride(); // does not work! }}
static method in interface 通过接口名就可以直接调用其静态方法
interface Drawable{ void draw(); static int cube(int x){return x*x*x;} } class Rectangle implements Drawable{ public void draw(){System.out.println("drawing rectangle");} } class TestInterfaceStatic{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); System.out.println(Drawable.cube(3)); }}
二:接口interface和抽象类abstract class的区别
public abstract class Shape{
public abstract void draw();
}Example:
public interface Drawable{
void draw();7)接口中没有
this
指针,没有构造函数. 抽象类中可以有 注意:
default
关键字只能在接口中使用(以及用在switch
语句的default
分支),不能用在抽象类中。接口默认方法不能覆写
Object
类的equals
、hashCode
和toString
方法。接口中的静态方法必须是
public
的,public
修饰符可以省略,static
修饰符不能省略。
阅读全文
0 1
- java8的interface和abstract class
- abstract class和interface
- abstract class和interface
- abstract class和interface
- abstract class和interface
- abstract class和interface
- abstract class和interface
- abstract class和interface
- abstract class和interface
- abstract class和interface
- abstract class 和interface
- abstract class和interface
- abstract class和interface
- abstract class 和 interface
- abstract class和interface
- abstract class和 interface
- abstract class和interface
- abstract class 和 interface
- Codeforces 828 B Black Square
- 【BFS】coj 1061 【魔方系列】最大色块
- 【GDOI2018模拟7.12】B
- 【软件安全】cwe-89 SQL Injection(一)
- spring扫描出现Annotation-specified bean name 'userService' for bean class [com.test.service.UserService]
- java8的interface和abstract class
- android 使用SciChart创建图表-目前性能效率最好的图表框架
- LintCode 152 买卖股票的最佳时机 IV
- poj 1330 Nearest Common Ancestors (树链剖分版LCA)
- cin学习--------cin.get()和cin.getline(),cin.clear(),cin.sync()等的用法.
- 简单应用传递练习
- linux(centos7)下SVN服务器如何搭建
- Android:如何将位置信息模式默认设置为高精确度
- eclipse设置javascript颜色