Java基础 接口

基本概念

  • 接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

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

接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法。

定义一个接口

interface A {  //定义一个接口
    public static final String CHANGLIANG = "hello";//全局常量
    public abstract void print();  //抽象方法
}

接口的使用

1、由于接口里面存在抽象方法,所以接口对象不能直接使用关键字new进行实例化。接口的使用原则如下:

  • 接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口;
  • 接口的子类(如果不是抽象类),那么必须要覆写接口中的全部抽象方法;
  • 接口的对象可以利用子类对象的向上转型进行实例化。
package 接口;

interface A{//定义一个接口A
    public static final String CHANGLIANG = "hello"; //全局常量
    public abstract void print();//抽象方法
}

interface B{//定义一个接口B
    public abstract void get();
}

class X implements A,B{//X类实现了A和B两个接口

    @Override  // 重写
    public void print() {
        System.out.println("接口A的抽象方法print()");
    }
    @Override
    public void get() {
        System.out.println("接口B的抽象方法get()");
    }
}

public class TestDemo {
    public static void main(String[] args){
        X x = new X();//实例化子类对象

        // 父类型引用指向子类型多态
        A a = x;//向上转型
        B b = x;//向上转型
        a.print();
        b.get();
        
        A a1 = new X();  // 父类型引用指向子类型多态
        B b1 = (B) a1;
        b1.get();
        System.out.println(a instanceof A);
        System.out.println(a instanceof B);
    }
}

/*
接口A的抽象方法print()
接口B的抽象方法get()
接口B的抽象方法get()
true
true
*/

2、对于子类而言,除了实现接口外,还可以继承抽象类

package 接口;

interface M{//定义一个接口M
    public static final String M = "hello";//全局常量
    public abstract void print();//抽象方法
}

interface N{//定义一个接口N
    public abstract void get();
}

abstract class C{//定义一个抽象类C
    public abstract void change();
}

class Q extends C implements M,N{ //Q类继承C类,并实现了M和N两个接口

    @Override
    public void print() {
        System.out.println("接口A的抽象方法print()");
    }

    @Override
    public void get() {
        System.out.println("接口B的抽象方法get()");
    }

    @Override
    public void change() {
        System.out.println("抽象类C的抽象方法change()");

    }

}

public class Test {
    public static void main(String[] args){
        Q q = new Q();
        q.get();
        q.print();
        q.change();

        M m1 = q;  // 父类型引用指向子类型多态
        N n1 = q;

        ((Q) m1).change();
        ((Q) n1).print();

    }
}

/*
接口B的抽象方法get()
接口A的抽象方法print()
抽象类C的抽象方法change()
抽象类C的抽象方法change()
接口A的抽象方法print()
*/

3、一个抽象类只能继承一个抽象类,但一个接口却可以使用extends关键字同时继承多个接口(但接口不能继承抽象类)

4、从接口的概念上来讲,接口只能由抽象方法和全局常量组成,但是内部结构是不受概念限制的,正如抽象类中可以定义抽象内部类一样,在接口中也可以定义普通内部类、抽象内部类和内部接口(但从实际的开发来讲,用户自己去定义内部抽象类或内部接口的时候是比较少见的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

!一直往南方开.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值