Java 接口、接口的实现,以及同继承的区别详解

版权声明:关注微信公众号:摸鱼科技资讯,联系我们 https://blog.csdn.net/qq_36949176/article/details/82919033

接口

什么是接口? 当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一种形式定义和表示,就是接口interface

定义接口使用的关键字不是class,是interface.

对于接口当中常见的成员:而且这些成员都有固定的修饰符

1、全局常量:public static final

2、抽象方法: public abstract

由此得出结论,接口中的成员都是公共的权限。

interface Demo 
{
    public static final int Num=4;
    public abstract void show1()'
    public abstract void show2(); 
    /*
    public static final 、public abstract 可以省略,在接口里你没写程序会自动帮你添加
    但是最好要写,省略的话可读性极差!!!
    */
}

类与类之间是继承关系,类与接口是实现关系

实现是接口有的,都得覆盖,继承是父类有的,可以拿来用,也可覆盖某些方法。

接口不可以实例化,只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化。

否则,这个子类就是一个抽象类。

class DemoImpl implements /*实现*/ Demo 
{
    public void show1(){}
    public void show2(){}
}
class InterfaceDemo
{
    public static void main (String[] args)
{
    DemoImpl d = new  DemoImpl();
    System.out.println(d.Num);
    System.out.println(DemoImpl.Num);
    System.out.println(Demo.Num);   
}
}

在Java 中不直接支持多继承,因为会出现调用的不确定性。

所以java将多继承机制进行改良,在Java中变成了多实现。

一个类可以实现多接口

多实现是怎么体现的?

interface A
{
    public void show();
}
interface Z 
{
    public void show();
    public int add(int a,int b);
}
class Test implements A,Z//多实现
{
    public void show(){}
    public int add(int a,int b)
{
       return a+b+3;
}
}

  一个类在继承另一个类的同时,还可以实现多个接口

class Q
{
    public void method()
    {}
}
class Test2 extends Q implements A,Z
{
    实现...
}

接口的出现,避免了单继承的局限性。因为一个类只能有一个父类,但是可以有多个接口,想要对其功能进行扩展,可以用接口。

类与类之间继承关系,类与接口之间实现关系。接口与接口之间继承关系(可以进行多继承)。

interface CC
{
    void show();
}
interface MM 
{
    void method();
}
interface QQ extend CC ,MM
{
    void function();
}
class WW implements QQ
{
    void show(){}
    void method(){}
    void function(){}
}

接口是对外暴露的规则、是程序的功能扩展,接口的出现降低耦合性、可以用来多实现  

抽象类和接口的异同点

相同点 :

都是不断向上抽取而来的

不同点:

1、抽象类需要被继承,而且只能单继承。接口需要被实现,而且可以多实现。

2、抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。

接口中只能定义抽象方法,必须由子类去实现。

3、抽象类的继承是 is a 关系(这个类哪一类) ,在定义该体系的基本共性内容。

接口的实现是like a 关系(这个类像哪种) ,在定义体系额外功能。

abstract  class 犬 
{
    abstract void 吼叫();
}
interface 导盲
{
    abstract void 导盲();
}

class 导盲犬 extends 犬 implements 导盲
{
    public void 吼叫 ()
{

}
    public void 导盲(){}
}

猜你喜欢

转载自blog.csdn.net/qq_36949176/article/details/82919033