二、接口

 1.【接口的定义】

(1)接口名/接口文件与类类似,接口也是使用.java文件编写。

(2)声明接口的关键字:interface,接口名命名规范与类名相同,习惯上,接口可以用I开头表示。

(3)接口的访问修饰符只能使用public和default修饰,不能使用protected和private(与外部类相同)。

(4)接口中的所有的属性,只能是公共的,静态的,常量。

   public static final int NAME=1;

  而且,public/static/final都可以省略,省略后依然是公共的,静态的常量。

  int NAME=1;

(5)接口中所有的方法必须是公共的抽象方法。

  而且,接口中的抽象方法,也可以省略public/abstract关键字。

  (public abstract) void say();

 2.【实现类实现接口】

(1)一个类实现接口使用implements关键字

(2)实现类实现一个接口,必须重写接口中的所有抽象方法,除非这个类是抽象类。

   一个类可以使用多个接口,多个接口之间,使用逗号隔开。

   class Desk implements IUsb2,3()

   一个类如果实现多个接口,必须重写所有接口中的所有方法。

(3)接口的引用可指向其实现类的对象(类似于父类引用指向子类对象)

  IUsb2 usb=new UDesk();

  因此可以使用接口实现多态。

 3.【接口继承接口】

(1)接口可以继承接口,使用extends关键字,接口继承与类的接口一样。

interface IUsb3 extends IUsb2{}

(2)接口可以多继承,多个父接口用逗号分隔,子接口继承多个父接口,将拥有所有父接口的抽象方法。

interface IUsb3 extends IUsb2,IUsb1{}

(接口不能被实例化)

4.【接口和抽象类的区别】 

 它们的本质区别:

  抽象类是一个类,接口是一个接口,子类继承抽象类,要求子类必须和父类是同一类事物,必须符合is-a关系。

  接口只是对功能的扩展。

  多个实现类实现接口时,并不要求所有的实现类是一类事物。

  接口符合like-a关系,理解为XXX具备一个XXX功能。比如人类狗类都具有吃饭功能,都具有吃饭接口,但是人类狗类的吃饭功能不能从同一个父类中继承。

(1)抽象类只能单继承,接口可以多继承,多实现。

(2)抽象类可以有自己的属性,接口中只能有静态常量。

(3)抽象类可以有非抽象方法,接口中的所有方法都必须是抽象方法(接口中的抽象方法可以省略abstract )。

(4)抽象类是一个类,接口是一种规范。

  子类继承抽象类,要求子类必须和父类是同一类事物。

  接口并不要求多个实现类是同一类事物,只能进行设计与实现的分离。

复制代码
interface IUsb2 {
/* public final static*/    int NAME=1;
//    public String name="1";//name是静态的,斜体的,接口的静态属性
    /*public abstract*/public void useUsb2();//在类中没有大括号必须加abstract修饰
}
    interface IUsb3 extends IUsb2{
        void useUsb3();
    }
     class UDesk implements IUsb2,IUsb3{

        @Override
        public void useUsb2() {
            // TODO Auto-generated method stub
            System.out.println("U盘使用useUsb2接口读取数据");
        }
        public void useUsb3() {
            // TODO Auto-generated method stub
            System.out.println("U盘使用useUsb3接口读取数据");
        }
        
    }
     class PC{
         private IUsb2 usb2 ;
         public PC(IUsb2 usb2){
             super();
             this.usb2=usb2;
         }
         public void useUsb(){
             usb2.useUsb2();
     }
     }
     public class Usb{
            public static void main(String[] args) {
                // TODO Auto-generated method stub
                
                System.out.println(IUsb2.NAME);
                IUsb2 usb=new UDesk();
                PC pc=new PC(new UDesk() );
                pc.useUsb();
            }
        }
     
复制代码
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页