• JAVA_基础面向对象:接口


    接口(interface)

    接口的使用

    1)接口使用interface来定义。

    2)在java中,接口和类是并列的两个结构。

    3)如何定义接口:定义接口中的成员。

    JDK7及以前:只能定义全局常量和抽象方法。

    • 全局常量:public static final(可省略)
    • 抽象方法:public abstract (可省略)

    JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法。

    • 接口中定义的静态方法,只能通过接口来调用。
    • 通过实现类的对象,可以调用接口中的默认方法。
    • 如果实现类重写了接口中的默认方法,调用时,则是重写后以后的方法。
    • 如果子类(或实现类)继承的父类和实现的接口中声明了同名同参的方法,那么子类在没有重写此方法的情况下,默认调用父类中的同名同参的方法。(类的优先原则)
    • 如果实现类实现了多个接口,而多个接口定义了同名同参的默认方法,那么在实现类没有重写此方法的情况下,报错。
      →接口冲突(这就需要我们必须在实现类中重写此方法)
    • 如何在子类(或实现类)的方法中调用父类、接口中被重写的方法。
    //		调用接口中默认的方法
    		CompareA.super.method3();
    		CompareB.super.method3();
    

    4)接口中不能定义构造器,意味着接口不可以实例化。

    5)java开发中,接口通过让类去实现(implements)的方式来使用。
    如果实现类覆盖了接口的抽象方法,则此实现类就可以实例化。
    如果实现类没有覆盖接口的抽象方法,则此实现类仍是一个抽象类。

    6)java类可以实现多个接口 → 弥补了java单继承的局限性。
    格式class AAextends BB implements CC,DD,EE

    public class InterfaceTest {
    	public static void main(String[] args) {
    		System.out.println(Flyable.MAX_SPEED);//7900
    		System.out.println(Flyable.MIN_SPEED);//1
    		Plane plane = new Plane();
    		plane.fly();//通过引擎起飞
    	}
    }
    interface Flyable{
    	//全局常量
    	public static final int MAX_SPEED = 7900;//未省略
    	int MIN_SPEED = 1;//省略
    	//抽象方法
    	public abstract void fly();//未省略
    	void stop();//省略
    }
    interface Attackable{
    	void attack();
    }
    class Plane implements Flyable{
    	@Override
    	public void fly() {
    		System.out.println("通过引擎起飞");
    	}
    	@Override
    	public void stop() {
    		System.out.println("驾驶员减少起飞");
    	}
    }
    abstract class Kite implements Flyable{
    	@Override
    	public void fly() {}
    }
    class Bullet extends Object implements Flyable,Attackable{
    	@Override
    	public void attack() {}
    	@Override
    	public void fly() {}
    	@Override
    	public void stop() {}
    }
    

    7)接口与接口之间可以继承,而且可以多继承。

    interface AA {
    	void method1();
    }
    interface BB {
    	void method2();
    }
    interface CC extends AA,BB {}
    

    8)接口的具体使用,体现多态性。

    9)接口可以看做是一种规范。

    public class USBTest {
    	public static void main(String[] args) {
    		Computer computer = new Computer();
    
    //		创建了接口的非匿名实现类的非匿名名对象
    		Flash flash = new Flash();
    		computer.transferData(flash);
    		System.out.println("************************");
    		
    //		创建了接口的非匿名实现类的匿名名对象
    		computer.transferData(new Printer());
    		System.out.println("************************");
    		
    //		创建了接口的匿名实现类的非匿名名对象
    		USB phone = new USB() {
    			@Override
    			public void start() {
    				System.out.println("手机开始工作");
    			}
    			@Override
    			public void stop() {
    				System.out.println("手机结束工作");
    			}
    		};
    		computer.transferData(phone);
    		System.out.println("************************");
    		
    //		创建了接口的匿名实现类的匿名名对象
    		computer.transferData(new USB() {
    			@Override
    			public void start() {
    				System.out.println("MP3开始工作");
    			}
    			@Override
    			public void stop() {
    				System.out.println("MP3结束工作");
    			}
    		});
    	}
    }
    class Computer {
    	public void transferData(USB usb) {
    		usb.start();
    		System.out.println("具体传输数据的细节");
    		usb.stop();
    	}
    }
    
    interface USB {
    	public abstract void start();
    
    	void stop();
    }
    
    class Flash implements USB{
    
    	@Override
    	public void start() {
    		System.out.println("U盘开始工作");
    	}
    
    	@Override
    	public void stop() {
    		System.out.println("U盘结束工作");
    	}
    	
    }
    
    class Printer implements USB {
    
    	@Override
    	public void start() {
    		System.out.println("打印机开始工作");
    	}
    
    	@Override
    	public void stop() {
    		System.out.println("打印机开始工作");		
    	}
    	
    }
    
  • 相关阅读:
    Ubuntu 下Apache安装和配置
    MariaDB二进制包简单安装部署
    Ubuntu下MongoDB的安装和使用
    Linux文件类型及目录配置
    centos7下挂载U盘和移动硬盘
    详解 比特(位,bit),字节(Byte),字符的区别 *(转)
    Socket使用及简单实例
    缓存
    字体小图标记录
    大流量下的兜底容灾方案
  • 原文地址:https://www.cnblogs.com/BeautifulGirl230/p/14228186.html
Copyright © 2020-2023  润新知