接口 Output?
package lee;
public interface Output {
//接口里定义的成员变量只能是常量
int MAX_CACHE_LINE=50;
//接口里定义的只能是public的抽象方法
void out();
void getData(String msg);
//在接口中定义默认方法,需要使用default
default void print(String... msgs) {
for (var msg :msgs)
{
System.out.println(msg);
}
}
default void test(){
System.out.println("默认的test()方法:default test() method ");
}
//接口中定义类方法,使用static
static String staticTest(){
return "接口里面的类方法(静态方法):the static method in the interface Output";
}
//定义私有方法
private void foo(){
System.out.println("私有的foo()方法:the private foo() method");
}
//定义私有静态方法
private static void bar(){
System.out.println("私有的静态方法bar()方法:the private static bar() method");
}
}
接口Product
package lee;
public interface Product {
int getProduceTime();
}
类Printer 实现了 以上两个接口
import lee.Output;
public class Printer implements lee.Output,lee.Product {
private String[] printData = new String[lee.Output.MAX_CACHE_LINE];//50个元素
//用来记录当前需要打印的作业数
private int dataNum = 0;
public void out() {
//只要还有作业就继续打印
while (dataNum > 0) {
System.out.println("打印机打印:" + printData[0]);
//把作业队列整体前移一位,并将剩下的作业书减1
System.arraycopy(printData, 1, printData, 0, --dataNum);//从指定的源数组拷贝一个数组,从指定的位置开始,
// 拷贝到指定数组的指定位置处,拷贝的数量由第四个参数length来决定
}
}
public void getData(String msg) {
if (dataNum >= Output.MAX_CACHE_LINE) {
System.out.println("输出队列已满添加失败");
} else {//把打印数据添加到队列里,已保存数据的数量加1
printData[dataNum ++] = msg;
}
}
public int getProduceTime()
{
return 45;
}
public static void main(String[] args)
{
//创建一个Printer对象,当成Output 使用
Output o=new Printer();
o.getData("轻量级JavaEE企业应用实战");
o.getData("疯狂Java讲义");
o.out();
o.getData("疯狂Android讲义");
o.getData("疯狂Ajax讲义");
o.out();
//调用Output接口中定义的默认方法
o.print("孙悟空","猪八戒","白骨精");
o.test();
//创建一个Printer对象,当成Product使用
lee.Product p=new Printer();
System.out.println(p.getProduceTime());
//所有接口类型的引用变量都可直接赋给Object类型的变量
Object obj=p;
}
}
|