Java中的接口

一·基本介绍

1.概念

1.接口就是将一些没有实现的方法封装到一起,当某个类要使用的时候,将其实现
2.关键字:implements

2.代码

package interface_pj;

public interface UsbInterface {//接口
	//规定接口的相关方法
	public void start();
	public void stop();

}
package interface_pj;

public class Phone implements UsbInterface{
	//Phone 类实现UsbInterface
	//解读1.即Phone类需要实现UsbInterface接口,规定/声明的方法
	   
	@Override
	public void start() {
		// TODO 自动生成的方法存根
	    System.out.println("手机开始工作~~~");	
	}

	@Override
	public void stop() {
		// TODO 自动生成的方法存根
		System.out.println("手机停止工作~~~");
	}
}
package interface_pj;

public class Camera implements UsbInterface{

	@Override
	public void start() {
		// TODO 自动生成的方法存根
		System.out.println("相机开始工作");
	}

	@Override
	public void stop() {
		// TODO 自动生成的方法存根
		System.out.println("相机停止工作");
	}
        
}
package interface_pj;

public class Computer {
	//编写一个类,计算机工作
	//1.UsbInterface usbinterface 形参是接口类型 UsbInterface
	//2.看到接收实现了UsbInterface接口的类的对象实例
      public void work(UsbInterface usbinterface)
      {
    	  //通过接口调用方法
    	  usbinterface.start();
    	  usbinterface.stop();
      }
}
package interface_pj;

public class interface_pj01 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		//创建手机,相机对象
		//Camera实现了UsbInterface
        Camera camera=new Camera();
        //Phnoe实现了UsbInterface
        Phone phone=new Phone();
        //创建计算机
        Computer computer=new Computer();
        computer.work(phone);//把手机接入到计算机
        System.out.println("========");
        computer.work(camera);//把相机接入到计算机
	}

}

上面的代码牵涉到了一个接口多态的问题,就是可以使用接口去创建一个实现了该接口的类(代码是跟着韩顺平老师敲的)
我的理解:接口其实就是一个特殊的父类,不过它的方法都需要子类实现
接口可以实现多继承,不过子类需要将它所实现的接口的所有方法实现算了,我是个傻逼

二·使用细节

1.注意事项一

1.接口不能被实例化
2.接口中的所有方法都是public的,接口中的抽象方法不需要用abstract修饰
3.一个类将接口实现,就必须将接口的所有方法实现
4.抽象类实现接口,可以不用实现接口的方法

2.代码一

package interface04;

public class Interface04 {
      //new IA();
}
//1.接口不能被实例化
//2.接口中的所有的方法是public方法,接口中抽象方法,可以不用abstract修饰
//3.一个普通类实现接口,就必须将该接口的所有方法都实现
//4.抽象类实现接口时,可以不用实现接口的方法
interface IA{
	void say();
    void hi();
}
class Cat implements IA{

	@Override
	public void say() {
		// TODO 自动生成的方法存根
		System.out.println("say~~");
	}

	@Override
	public void hi() {
		// TODO 自动生成的方法存根
		System.out.println("hi~~");
	}
}
abstract class Tiger implements IA{
	
}

3.注意事项二

5.一个类可以实现多个接口
6.接口中的属性只能是final的,而且是public static final 修饰的。比如int a=1;实际上是public static final int a=1。
7.接口中属性的访问形式:接口名.属性名
8.一个接口不能继承其他的类,但是可以继承多个别的接口
9.接口的修饰符 只能是public 和默认(default),这点和类的修饰符是一样的

4.代码二

package interface04;

public class Interface041 {
     public static void main(String[] args)
     {
    	 System.out.println(IB.n1);//说明n1就是static的
    	 //IB.n1=30;//不允许,说明n1是final
     }
}
interface IB{
	           //接口中属性的访问形式:接口名.属性名
	int n1=10;//等价于public static final int n1=10;
	void hi();
}
interface IC{
	void say();
}
//一个类同时可以实现多个接口
class Pig implements IB,IC{

	@Override
	public void say() {
		// TODO 自动生成的方法存根
		System.out.println("say~~~");
	}

	@Override
	public void hi() {
		// TODO 自动生成的方法存根
		System.out.println("hi~~~");
	}	
}
//接口不能继承其他的类,但是可以继承多个别的接口
interface ID extends IB,IC{	
}
//接口的修饰符,只能是public和默认(default),这点和类的修饰符一样

三·接口多态

1.理解

这其实和前面学的多态很像,前面所说的多态中:提起一个类,它在运行的时候是它自己或者它的子类,这里的多态就是:提起一个接口,它在运行的时候是实现了它的类。

2.代码

package interfaceandpoly;

public class Interfacepoly01 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
        //接口的多态体现
		//接口类型的变量if01可以指向实现了IF接口的对象实例
		IF if01=new Monster();
		if01=new Car();
		//继承体现的多态
		AAA a=new BBB();
		a=new CCC();
	}

}
interface IF{}
class Monster implements IF{}
class Car implements IF{}
class AAA{
	
}
class BBB extends AAA{}
class CCC extends AAA{}

也可以和前面的多态数组一样创建接口数组
代码如下

package interfaceandpoly;

public class interfaceandpoly02 {
         public static void main(String[] args)
         {
        	 //多态数组-》接口类型的数组
        	 Usb[] usbs=new Usb[2];
        	 usbs[0]=new Phone();
        	 usbs[1]=new Camera();
        	 /*
              * 给Usb数组中,存放Phone和Camera对象,Phone类还有一个特有的方法call();
              * 请遍历Usb数组,如果是Phone对象,除了调用Usb接口定义的方法外
              * 还需要调用Phone特有方法call
              */
            for(int i=0;i<usbs.length;i++)
            {
            	usbs[i].work();
            	//类型判断,我们仍然需要进行类型的向下转型
            	if(usbs[i] instanceof Phone)//判断它的运行类型是Phone
            	{
            		((Phone)usbs[i]).call();
            	}
            }
         }
}
interface Usb{
	void work();
}
class Phone implements Usb{
	public void call()
	{
		System.out.println("手机可以打电话~~~");
	}

	@Override
	public void work() {
		// TODO 自动生成的方法存根
		System.out.println("手机工作中~~~");
	}
	
}
class Camera implements Usb{
	@Override
	public void work() {
		// TODO 自动生成的方法存根
		System.out.println("相机机工作中~~~");
	}
	
}

还有就是接口的多态传递
代码如下

package interfaceandpoly;

public class Interfaceandpoly03 {
	//接口多态的传递
	public static void main(String[] args)
	{
		//接口类型的变量可以指向 实现了该接口的类的对象实例
		IG ig=new Teacher();
		//如果IG 继承了IH 接口,而Teacher类实现了IG接口
		//那么,实际上就相当于Teacher 类也实现了IH接口
		//这就是所谓的接口多态 多态传递现象
		IH ih=new Teacher();
	}

}
interface IH{
	void hi();
}
interface IG extends IH{}
class Teacher implements IG{
	@Override
	public void hi() {
		//IG继承了IH接口,而Teacher类需要实现IG接口,即Teacher类也需要实现IH接口
		// TODO 自动生成的方法存根
		System.out.println("hi~~");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值