JAVA—接口

接口
接口的基本定义:

如果一个类只是由抽象方法和全局常量组成的,那么在这种情况下不会将其定义为一个抽象类,而只会将其定义为接口。所以所谓的接口严格来讲就属于一个特殊的类,而且这个类只有抽象方法和全局常量。

一.定义接口:

在java中可以使用interface关键字来实现接口的定义。
代码如下:

interface A {
    public static final String MSG = "HELLO" ;
    public abstract void print() ;
}

本程序定义了一个A接口,在此接口中定义了一个抽象方法(print())和一个全局变量(MSG),但是由于接口中存在抽象方法,所以接口对象不可能直接使用关键字new进行实例化的操作。

二.接口的使用原则:

1.接口必须要有子类,但是此时一个子类可以使用implement关键字实现多个接口,避免单继承局限。
2.接口的子类(如果不是抽象类),必须要覆写接口中的全部抽象方法。
3.接口的对象可以利用子类对象的向上转型进行实例化操作。

三.实现接口:
interface A {
    public static final String MSG = "HELLO" ;
    public abstract void print() ;
}
interface B {
    public abstract void get() ;
}
class X implements A,B {
    public void print() {
        System.out.println("A接口的抽象方法!");
    }
    public void get() {
        System.out.println("B接口的抽象方法!");
    }
}
public class TestDemo {
    public static void main(String args[]) {
        X x = new X() ;
        A a = x ;
        B b = x ;
        a.print();
        b.get();
        System.out.println(A.MSG);
    }
}

程序执行结果:

A接口的抽象方法!
B接口的抽象方法!
HELLO

本程序定义了两个接口A、B,同时在定义X子类时利用了implements关键字实现了两个接口,这样在X子类中就必须覆写两个接口中提供的全部抽象方法,同时X类的对象也就可以利用向上转型的概念,为A或B两个接口进行实例化操作。

四.子类继承抽象类并实现接口:

如果一个子类既要继承抽象类又要实现接口,那么应该采用先继承后实现接口的顺序完成。

interface A {
    public abstract void print() ;
}
interface B {
    public abstract void get() ;
}
abstract class C {
    public abstract void change() ;
}
class X extends C implements A,B {
    public void print() {
        System.out.println("A接口的抽象方法");
    }
    public void get() {
        System.out.println("B接口的抽象方法");
    }
    public void change() {
        System.out.println("C接口的抽象方法“);
    }
}

本程序X子类是接口A,B以及抽象类C三个的子类,所以X类的对象可以同时被三个父类实例化。

五.观察接口的多继承:

一个抽象类可以继承一个抽象类或者实现多个接口,但是反过来,一个接口却不能继承抽象类。但是一个接口却可以使用extends关键字同时继承多个父接口。

interface A {
    public void funA() ;
}
interface B {
    public void funB() ;
}
interface C extends A,B {
    public void funC();
}
class X implements C {
    public void funA() {}
    public void funB() {}
    public void funC() {}
}

本程序在定义接口C时使用extends关键字继承了两个父接口,这就相当于C接口中一共定义了3个抽象方法(funA()和funB()通过父接口继承下来),所以在定义X子类时必须覆写三个抽象方法。

六.在接口里定义抽象类:

虽然在接口本身的概念上来讲只能够由抽象方法和全局常量组成,但是所有的内部结构不受这些要求的限制,也就是说在接口里面可以定义普通内部类、抽象内部类、内部接口。

interface A {
    public void funA() ;
    abstract class B {
        public abstract void funB() ;
    }
}
class X implements A {
    public void fun A() {
        System.out.println("Hello,world!");
    }
    class Y extends B {
        public void funB() {}
    }
}

本程序在A接口的内部定义了一个内部抽象类B,这样A接口的X子类就可以根据自己的需求来选择是否要继承内部的抽象类B。
强调:
在一个接口内部如果使用static去定义一个内部接口,该接口就表示一个外部接口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值