Java基础:接口和抽象类

来源:互联网 发布:软件开发全面质量管理 编辑:程序博客网 时间:2024/09/21 06:38

必须被继承的类——抽象类

抽象类的定义:

Abstract class Classname1{Abstract void method1();    //抽象方法Abstract void method2(); String var1;          //成员变量 Void method(){       //成员方法……}}

抽象类的继承:

TIPS某一个类继承另一抽象类,它未必一定要实现该抽象类的所有抽象方法,它会拥有父类的所有成员变量和方法;

 

不能被继承的类——final类

注意:

  •   Final类不能被继承,没有子类;
  •   Final方法不能被子类方法覆盖,但可被继承;
  •   Final成员变量表示常量,只能被赋一次值。
  •   Final能且只能被初始化一次;
  •   Final成员必须在声明时或者构造方法中被初始化;

 

多重继承——接口类

接口的创建于实现注意:

  •   Interface关键字用来声明一个接口,它可以产生一个完全抽象的类:
  •   接口的方法只能是抽象的和公开的,Java接口不能有构造器(构造方法),不能有任何方法体;

Public interface 接口名{Public 返回值类型 方法名 (参数列表);……}

  •   接口的字段会被隐式的声明为static 和final。
Public interface 接口名{Public static int a=1;Public final int b=2;  ……}

  •   接口的字段只是被存储在该接口的静态存储区域中,而不属于该接口。
  •   接口的方法可以被声明为public或者不声明,但结果会按照public类型处理。
  •   实现一个接口时,被定义的方法需声明为public类型,否则为默认类型,编译报错。
  •   如果没有实现接口中的所有方法,那么创建的依然只是一个借口。
  •   扩展借口:extends;实现接口:implements。

 

TIPS:若某一个类同时实现了多个接口,那么该类必须实现这些接口的所有接口方法。

 

接口与抽象类的区别:

(1)    抽象类可以提供实现方法,接口不能:

Java抽象类可以提供某些方法的具体实现,然而接口不行。向一抽象类加一具体方法时,他的所有子类都得到了这个方法。向一接口类加一新方法时,必须让每一个类都实现这个方法才可以通过编译;

(2)    抽象类只能继承一个,而可以实现多个接口:

根据这种理念,衍生出Java最经典的设计模式:

声明的工作由Java接口承担,同时给出一个抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类,也就是说在层次结构上,Java接口在最上面,然后接跟着抽象类。实现代码如下:

 //接口Publicinterface Classname1{Publicvoid func1();    //定义接口方法……} //抽象类Public abstractclass Classname2{Public voidfunc2(){   //定义实现方法……}……} //实现类Public classClassname3 extends Classname2 implements Classname1{Publicvoid func1(){  //定义实现接口 Func2();     }}

   (3)抽象类里可以有构造方法,而接口内不能有构造方法。

   (4)抽象类中可以有普通成员变量,而接口中不能有普通成员变量。

   (5)抽象类中可以包含静态方法,接口内不能包含静态方法。

   (6)抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

   (7)抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public  static类型,并且默认为public static类型。

   (8)抽象方法可以有main方法,我们可以运行它,但接口没有main方法,因此我们不能运行它。

   (9)抽象方法比接口速度要快,接口需要时间去寻找在类中实现的方法。

   (10)如果你往抽象类中添加新的方法,你可以在当前抽象方法中给它提供默认的实现,或者在当前类中提供抽象方法并在子类中实现该方法。如果你往接口中添加方法,那么你必须在实现该接口的类中实现该方法。


如何选择接口和抽象类:

设计过程中,尽量不要使用一个具体类去继承另一个具体类,Java接口和抽象类就是为了实现具体类的实现和继承而服务的。使用Java接口和抽象类进行变量的类型声明、参数的类型声明、方法的返回类型声明、以及数据类型的转换等;而不要使用具体Java类进行这些操作。

  •    如果要创建不带任何方法定义和成员变量的基类,选择接口而不是抽象类;
  •    如果知道某各类是基类,那么第一选择是接口,只有在必须要有方法定义和成员变量的时候,才选择抽象类。




0 0