Java基础------知识点整理(七)-----接口

1.当一个抽象类的方法都是抽象的方法时,这是就可以用另一种形式定义和表示          ------------      接口(关键字  :  interface ),定义时不用class

    例:   

interface   Demo{
    public   abstract   final   int  NUM=1;//全局常量
    public   abstract   void   show(); //抽象的方法
}

    接口中修饰变量:public    abstract   final    ......

    接口中修饰方法:public    abstract    ......

    以上两种形式是固定的,哪怕你只写一个abstract编译器也会帮你自动加上,但是最好按照这个格式写完整


2.类与类之间是继承关系

   类与接口之间是实现关系

   接口与接口之间是继承关系


3.java中不能直接支持多继承,因为会出现调用同一函数的不确定性,但是java可以实现多个接口,这是因为接口中的方法都是抽象的,哪怕父类A,B中有相同的函数名,由于没有被具体化,所以调用谁的都一样,不会发生不确定性。  格式如下

class    C    implements   A,B{   //实现A和B的接口,A和B用逗号隔开
    coding   .....
}

4.抽象类与接口的异同点

相同点:都是具有抽象方法

不同点:

(1)抽象类需要被继承,而且只能单继承

          接口需要被实现,而且支持多实现

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

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

(3)抽象类的继承是  is - a   关系,在定义该体系的基本共性内容

          接口的实现时      like - a   关系,在定义体系额外的功能


5.什么时候用抽象,什么时候用接口呢?

(1)当一个类中的方法需要抽象,但作为一个比较大的抽象主体,也有一些一般的方法,此时用抽象

(2)接口作为额外扩展的功能,因而里面的方法少且全为抽象时,用接口,把接口注重为额外扩展的功能

   原则:抽象里面的方法为这个类体系中最根本的属性, 而接口更像是一种额外的功能


6.

public  interface  A{
    public void abstract a();
}
public  interface  B{
    public void abstract  b();
}
public  class  C{
    public void  a(){  syso “aaaaa”;}
}
public  class D  extends  C  implements  A,B{
    public  void  b( syso("bbbbb"));
}


由于C里有一个a方法,所以D继承C时,就已经有了一个a方法,也就不用在实现A中的a方法了

此外将一个具体类和多个接口组合到一起时,这个具体类必须放在前面,后面跟着的才是接口,否则编译报错


7.使用接口的两大核心原因

(1)为了能够向上转型为多个基类型(以及由此而带来的灵活性)

(2)与使用抽象基类相同:防止客户端程序员创建该类的对象


8.组合接口时的名字冲突

interface  I1{ void f(); }
interface  I2{ int  f(int i);}
interface  I3{ int  f();}
class  C  {  public  int  f()  {  return  1 ;}}
class  C2  implements  I1,I2{  //两个接口名相同,返回值及参数列表不同时,需要分别实现
    public void f(){}
    public int f(int i){return  1;}
}
class C3  extends C  implements  I2{  //父类的函数和接口的函数参数列表不同,也需要把接口的函数实现
    public  int  f(int  i){  return  1;}
}
class C4  extends  C  implements  I3{   //完全一样的,写也没事,不写由于继承于C了,所以也没事
    public  int  f(){  return  1;}
}
//  !   class C5 extends  C  implements  I1{}   //C中的f()与I1中的f()不是一模一样(参数列表,返回值都必须一样),所以必须里面实现I1的f()
//! interface  I4  extends  I1, I3 {}  //由于I1  和I3  里面的函数不是一模一样,所以会产生分析,子类不知道实现那个接口可好。



8.优先选择类而不是接口,不要滥用接口,它只是一个工具,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值