java8改进的接口(二)

来源:互联网 发布:linux目录结构命令 编辑:程序博客网 时间:2024/04/29 16:44

1.接口主要有如下用途:

1)定义变量,也可用于进行强制类型转换  

2)调用接口中定义的常量

3)被其他类实现


2.一个类可以实现一个或多个接口,实现使用implements关键字。注:一个类实现了接口以后,这个类必须实现接口里的全部抽象方法,否则,这个类就变为了抽象类。

public interface Output{int MAX_CACHE_LINE = 2;//成员变量void out();//定义一个抽象方法voidvoid getdata(String msg);//定义一个抽象方法getdatadefault void print(String...msgs){//定义一个默认方法print。这个默认方法的作用是打印数组for(String msg:msgs){System.out.println(msg);}}default void test(){//定义一个默认方法System.out.println("Peniess");}}

interface Product{int getProductTime();//定义一个抽象方法}public class Printer implements Output,Product{private String[] printData = new String[MAX_CACHE_LINE];//定义一个数组成员变量private int dataNum;public void out(){//重写void方法while(dataNum>0){System.out.println("打印机打印"+printData[0]);//每次都打印第一个数组System.arraycopy(printData,1,printData,0,--dataNum);//每打印一次数组都向左移动一位,然后减1数组长度}}public void getdata(String msg){//重写getdata方法if(dataNum>=MAX_CACHE_LINE){System.out.println("输出队列已满,添加失败");}else{printdata[dataNum++] = msg;//每次都往printdata数组里面保存一个变量,并把数组长度加1。}}public int getProductTime(){//重写getProductTime方法return 45;}public static void main(String[] args){Output o = new Printer();//创建Printer的对象并把它引用为Output   体现了①o.getdata("算法导论");o.getdata("thinking in  java");o.out();o.getdata("算法");o.getdata("算法珠玑");o.out();o.print("孙悟空","猪八戒","白骨精");o.test();Product p = new Printer();//创建Printer的对象并把它引用为Product。体现了多态System.out.println(p.getProductTime());Object obj = p;//向上转型Object obj2 = o;}}

注:实现接口方法时,必须使用public访问控制修饰符。(因为接口方法都是public修饰,重写的方法只能和public相等或更大


3.接口和抽象类

1)接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。

2)接口和抽象类都可以包含抽象方法,如果定义子类为普通类,那么都要实现这些方法,否则子类要被定义为抽象类。


4.接口和抽象类的不同

1)接口只能有抽象方法,类方法和默认方法,而抽象类完全可以包含普通方法。

2)接口里只能定义静态常量,不能定义普通成员变量,而抽象类既可以定义静态常量,也可以定义普通成员变量。(常量——final修饰)

3)接口不包含构造器,但抽象类可以包含构造器。(抽象类的构造器不是用于创建本类实例,而是用来被子类调用)

4)接口里不能有初始化块。

5)一个类只能有一个直接父类,但接口可以继承多个接口。


0 0