Java之接口与实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40285302/article/details/82924199

接口,顾名思义就是一个入口,什么的入口呢?当然是方法的的入口,接口与abstract类很类似,在接口中,不必具体说明方法的作用,只需要在接口中定义一个方法名就好,也就是说只需要知道这个方法有什么功能,而不必在意他的细节(是不是跟abstract类很像!  因为接口中的方法只能是abstract方法呀!)那么,接口与abstract类的区别是什么呢?为什么要定义接口呢?这个就需要学习过后才能理解了。

一、定义接口

使用关键字interface来定义一个接口,接口的定义分类接口声明和接口体。例如:

interface  computer{             }

括号里面的就是接口体了。

接口体:接口体中包含常量的声明和抽象方法两部分。接口体中是没有变量的和普通方法的,也就是说只有常量和抽象方法!并且,接口体中所有的常量和抽象方法的访问权限都要是public,常量也要是static常量。但是,public,static,final,abstract这些修饰符都是可以省略的。可以直接定义,例如:float  n = 10;   float  sum(float x , float  y);   

二、接口实现

1、接口实现

也就是说可以用这个接口里面的常量和方法了。而接口的实现是由类来实现的,在 类的声明 中使用关键字implements声明一个或多个接口(多个接口就用逗号隔开就好了)。例如A类实现computer和phone接口:

class  A implements  computer,phone{}

2、重写接口中的方法

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

Ps:类在重写接口方法时要去掉abstract修饰符,要给出方法体,要加public!

如果一个抽象类实现了某个接口,那么抽象类可以重写接口中的方法,也可以直接拥有接口中的方法。

3、接口细节说明

①、程序可以用接口名访问接口中的常量

②、如果一个类实现了接口,那么该类可以在类体中直接使用该接口的常量

③、若在定义接口时不在interface前面加上public关键字,则接口为友好型接口,只能被同一包中的类实现。public接口可以被任何一个类实现。

④、如果父类实现了某个接口,那么子类也会实现该接口。

⑤、接口也可以被继承。

三、接口回调

用接口声明的变量称为接口变量。接口属于引用型变量(什么是引用型变量?),就是说,可以把实现该接口的类  的 对象 赋值给接口变量,官方语言就是  接口变量中可以存放实现该接口的类的实例的引用,即存放对象的引用。

例如 有一个Com 接口,ImpleCom类实现了Com接口

Com  com;//声明接口变量com

ImpleCom  object  =  new  ImpleCom();

com  =  object;

将object对象赋值给了com接口,那么,com就可以调用 类(object)实现的接口方法了。这一个过程就叫做接口回调(接口无法调用类中的非接口方法的)。

如果一个方法的参数是接口类型,那么就可以将实现该 接口的 类的 实例的 引用(也就是该类的对象)传递给接口参数,即接口参数就可以回调类实现的接口方法。

由接口产生的多态就是指不同的类在实现同一个接口时可能具有不同的实现方式(也就是重写的接口方法不同)。

四、对接口的理解

1.接口可以要求某些类有 相同名称 的 方法,但方法的具体内容可以不同,没有什么关系的类可以实现同一接口。

2.接口与abstract类的比较:①接口中只能有常量,不能有变量,而abstract类中可以有。②abstract类中可以有非abstract方法,但借口不可以。

广告词设计:

Advertisement.java   接口

public interface Advertisement {  
    public void showAdvertisement();
    public String getCorpName();
}

 接口参数的回调

public class AdvertisementBoard {
    public void show(Advertisement adver){
        System.out.println(adver.getCorpName() + "的广告词如下");
        adver.showAdvertisement();   //  接口参数的接口回调
    }
}

实现接口的类

public class Andy implements Advertisement{
    public void showAdvertisement(){
        System.out.println("****************");
        System.out.println("**无需完美,温暖就好**");
        System.out.println("****************");
    }
    public String getCorpName(){
        return "Andy书屋";
    }
}

public class HchildD implements Advertisement{
    public void showAdvertisement(){
        System.out.println("****************************");
        System.out.println("**愿你经历了所有黑暗,仍保持天真的美好**");
        System.out.println("****************************");
    }
    public String getCorpName(){
        return "HchildD";
    }
}

main函数

public class HaiZhi {

    public static void main(String[] args) {
        AdvertisementBoard board = new AdvertisementBoard();
        board.show(new Andy());
        System.out.println("---------------------------------");
        HchildD hd = new HchildD();
        board.show(hd);
    }

}

猜你喜欢

转载自blog.csdn.net/qq_40285302/article/details/82924199