• 接口(三):


    1、接口不能用于创建实例,但接口可以声明引用类型变量,并且该引用类型变量必须引用到其实现类的对象。

    2、接口的主要用途:

      .2.1、定义变量,也可用于进行强制类型转换

      .2.2、调用接口中定义的常量

      .2.3、被其它类实现

    3、一个类可以实现多个接口,也是为了弥补Java类单继承灵活性的不足,而进行的补充,类实现接口的语法格式:

    [修饰符] class 类名 extends 父类 implements 接口1,接口2...{
    
      类体部分
    
    }
    

     4、实现接口与继承父类相似,一样可以获得所继承接口里的常量(成员变量)、方法(抽象方法、默认方法,不包括类方法),代码如下:

    interface InterfaceA{
    	int a=1;
    	void testA();
    	default void testB(){
    		System.out.println("接口InterfaceA中的默认方法testB()");
    	}
    	static void testC(){
    		System.out.println("接口InterfaceA中的类方法testC()");
    	}
    }
    
    public class ImplementsTest implements InterfaceA{
    	public void testA(){
    		System.out.println("ImplementsTest类实现接口InterfaceA中的testA()方法");
    	}
    
    	public void outSper(){
    		//-如下代码说明类实现接口,可以继承接口的默认方法
    		testB();
    	}
    	
    	public static void outStaticSper(){
    		//-如下代码编译报错,提示找不到方法testC(),说明类实现接口不会继承接口的类方法
    		//testC();
    
    		//-要调用接口的类方法,必须通过接口来调用
    		InterfaceA.testC();
    	}
    	
    	public static void main(String[] args){
    		System.out.println(new ImplementsTest().a);
    		new ImplementsTest().testA();
    		new ImplementsTest().outSper();
    		outStaticSper();
    	}
    }
    

    运行结果:

    5、一个类实现了一个或多个接口之后,这个类必须完全实现这些接口里的所有抽象方法,否则该类将保留从父接口里继承来的抽象方法,也就是说该类也必须是抽象类

    6、可以把实现接口理解为一种特殊的继承,相当于实现类继承了一个彻底抽象的类,下面代码为实现接口的类:

    import static java.lang.System.*;
    interface Product{
    	int getProduceTime();	
    }
    
    interface OutPut{
    	int MAX_CACHE_LINE=50;
    	void out();
    	void getData(String mes);
    	default void print(String...mesg){
    		for(String str:mesg){
    			out.println(str);
    		}
    	}
    	
    	default void test(){
    		out.println("接口OutPut的默认方法test()!");
    	}
    
    	static String staticTest(){
    		return "接口OutPut的类方法staticTest()!";
    	}
    }
    
    public class Printer implements Product,OutPut{
    	private String[] printData = new String[MAX_CACHE_LINE];
    	private int dataNum=0;
    	
    	public int getProduceTime(){
    		return 45;
    	}
    	
    	public void out(){
    		while(dataNum>0){
    			out.println("打印机打印:"+printData[0]);
    			arraycopy(printData,1,printData,0,--dataNum);
    		}
    	}
    
    	public void getData(String mes){
    		if(dataNum>=MAX_CACHE_LINE){
    			out.println("输出队列已满,添加失败!");
    		}else{
    			printData[dataNum++]=mes;
    		}
    	}
    	
    	public static void main(String[] args){
    		Printer p = new Printer();
    		p.getData("我的!");
    		p.getData("你的!");
    		p.out();
    		
    		p.getData("他的!");
    		p.getData("大家的!");
    		p.out();
    
    		p.print("我的","你的","他的","大家的");
    		p.test();
    
    		out.println(p.getProduceTime());
    		//-父接口的静态方法,只能通过父接口来调用
    		out.println(OutPut.staticTest());
    	}
    }
    

     运行效果:

    注:

    1、实现接口的方法时必须用 public 修饰,因为接口里的方法都是 public 修饰的,而子类重写父类的方法时,访问权限只能是更大或相等,所以实现接口里的方法时必须用 public 修饰

  • 相关阅读:
    Google新闻昨晚发生全球服务中断 波及国内 狼人:
    德国"反黑客"法出炉:拥有黑客工具是非法的 狼人:
    百付宝携手瑞星 打造零风险支付平台 狼人:
    四月新增电脑病毒180万 2千万台次电脑遭攻击 狼人:
    PDF文件和Word文档面临更多网络安全威胁 狼人:
    麻省理工学生令计算机系统升级不需重启 狼人:
    nullnullIOS控件AlertView的使用
    设置源ARM中断处理_S3C2440
    软件授权码Python之道Python连接MYSQL数据库和发送邮件
    目标文件符号《深入理解计算机系统》笔记(三)链接知识【附图】
  • 原文地址:https://www.cnblogs.com/baby-zhude/p/8158499.html
Copyright © 2020-2023  润新知