interface接口的问题

定义接口的时候是由关键字interface来定义自己是一个接口,格式如下:

interface 接口名

接口体中包含常量的声明和抽象方法两部分

接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量的访问权限一定都是public,而且是static常量,所有的抽象方法的访问权限一定都是public;

eg:

interface A{

public static final int MAX=99;

public abstract void add();

public abstract float sum(int a,int b);

 

接口与类的区别:

接口不能用于实例化对象;

接口没有构造方法;

接口中所有的方法必须是抽象方法;

接口不能包含成员变量,除了 static 和 final 变量;

接口不是被类继承了,而是要被类实现;

接口支持多继承;

类实现接口

一个类需要在类声明中使用关键字implements声明该类实现一个或多个接口

例如:

class A implements One,Two

 

还有另外一种方式

Animal的Dog子类实现One接口

class Dog extends Animal implements One

 

重写接口的方法

如果一个非抽象类实现了某个接口,那么这个类必须要重写这个接口中的所有方法;

//定义接口IFly

public interface IFly{

//创建方法fly()

public void fly();

}

//创建类Plane并实现接口IFly

public class Plane implements IFly {

//重写fly方法

@Override

public void fly() {

// TODO Auto-generated method stub

System.out.println("飞机在天上飞!");

}

}

public class Test {

public static void main(String[] args) {

//对象实例化

IFly t2 = new Plane();

//分别调用fly()方法

t2.fly();

}

}

 

定义接口的时候,如果关键字interface前面加上public关键字,那么就称这个接口是一个public接口,public接口可以被任何一个类实现。如果不加public修饰,就称这个接口是一个友好接口,友好接口可以被与该接口在同一个包中的类实现;

在实现接口的时候,要注意一些规则:

一个类可以同时实现多个接口。

一个类只能继承一个类,但是能实现多个接口。

一个接口能继承另一个接口,这和类之间的继承比较相似。

例如:接口间的继承

public interface ISon extends IFather{

void run();

}

 

在Java中,类的多继承是不合法,但接口允许多继承。

代码的实现如下所示:

  • Door.java 类
    
    public abstract class Door {
    
    //防盗门是一个门 is a 的关系
    
    //开门功能
    
    public void openDoor() {};
    
    //关门功能
    
    public void closeDoor() {};
    
    }
  •  
  • Lock.java类
    
    public interface Lock {
    //防盗门上有一个把锁 has a 的关系
    
    //锁门功能
    
    public void lockDoor();
    
    //解锁功能
    
    public void unlockDoor();
    
    }
  • TheftDoor.java类
    
    public class TheftDoor extends Door implements Lock{
        //开门的实现方法
        public void openDoor() {
            System.out.println("开始开门。开门中。开门结束");
        }
        //关门的实现方法
        public  void closeDoor() {
            System.out.println("准备关门。关门中。关门结束");
        }    
        //锁门功能
        @Override
        public void lockDoor() {
            System.out.println("插入钥匙,转动,锁上,拔出钥匙");
          }
         //解锁功能
        @Override
        public void unlockDoor() {
            System.out.println("插入钥匙,转动,解锁,拔出钥匙");
       }
        }
  •  
  •  
  • Mytest 类
     
    public class Mytest {
    	
    	@Test
    	public void test1() {
    		
    		//不使用接口调用
    		TheftDoor theftDoor= new TheftDoor();
    		
    			//出门步骤:关门---》锁门
    		
    		theftDoor.closeDoor();
    		theftDoor.lockDoor();
    		
    			//回家步骤:开锁---》开门
    		theftDoor.unlockDoor();
    		theftDoor.openDoor();
    		
    		System.out.println("+++++++++++++++++++++++++++");
    		
    		//调用接口中的方法,实现实现类中的方法
    		Lock lock= new TheftDoor();
    		 lock.unlockDoor();
    		 lock.lockDoor();
    		 
    		 System.out.println("++++++++++++++++++++++++++");
    		 
    		 //调用抽象类中的方法,实现实现类中的方法
    		 Door door= new TheftDoor();
    		 door.closeDoor();
    		 door.openDoor();
    		 	 
    		 /**
    		  * 门和防盗门是继承关系;
    		  * 但是门和锁是非继承关系,如何实现继承呢?
    		  * java的设计者想到了interface接口;
    		  * 
    		  * 
    		  */	
    	}
     
    }
  •  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值