Java 抽象类和接口(部分)

Posted LG320404363

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 抽象类和接口(部分)相关的知识,希望对你有一定的参考价值。

4.1 抽象类


        编写一个类时,为该类定义一些方法,这些方法用于描述该类的行为方式,这些方法都有具体的方法体,但在某些情况下,某个父类仅知道其子类应该包含哪些方法,却无法准确她知道子类实现这些万法的细节。如定义一个图形类(Shape)作为诸如三角形、菱形以及矩形等图形的父类,在该父类中定义calcPerimeter)方法,该方法用于计算图形的周长,但不同的子类图形计算周长的方式大相径庭,所以导致 Shape 类的 calcPerimeter0)万法无法运用某个固定的计算图形周长的公式来计算其子类的周长。
        在Java 中,可以将calcPerimeter()方法定义为抽象方法,抽象方法没有具体的方法实现,该方法必须由其继承的子类重写,这样该方法就起到了约束规范的作用,又不影响类最初的设计思路。

4.1.1 抽象方法和抽象类


        抽象类是专门设计用来让子类继承,抽象方法心须被子类重写。
在 Java语高中,使用abstract 关健字修饰一个类时,该类就是她象类,使用abstract 关健字修饰一个方法时该方法即为抽象方法。

     抽象类和抽象方法的规则如下     :

(1)一个抽象类中可以不定义抽象方法,但是只要类中有一个抽象方法,则该类一定是抽象类
(2)抽象类不能被实例化,即不能被 new 创建一个实例对象。
(3)如果一个子类继承一个抽象类,则子类需要通过覆盖的方式来重写该抽象类中的所有抽象方法,如果子类没有完全重写抽象父类中所有的抽象方法,则子类仍是抽象的。
(4)抽象方法可以与public、protected 夏合使用,但不能与 tinal、private 和 static 复合使用。

 

抽象类的作用


        抽象类不能被实例化,只能作为父类被继承。从语义的角度而言,抽象类是从多个具体类中抽象出来的父类,从多个具有相同特征的类中抽象出一个抽象类,以该抽象类作为其子类的模板,从而避免了子类设计时的随意性。抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造但子类总体上会保留抽象类的行为方式。
        编写一个抽象父类,父类提供多个子类的通用方法,并且将一个或多个方法留给其子类实现,这就是一种模板模式模板模式是一种常见的设计模式。

 

final 修饰符


        final 关健字可以用于修饰类、变量和万法。final修饰变量时,表示该变量一旦获得了初始值就不可能被改变。 final修饰的类不能被继承,final修饰的方法可以被继承但不能被重写。

 final 成员变量


        对于final修饰的成员变量而言,一旦赋初始值就不能被重新赋值,如果既没有在定义成员变量时指定初始值,也没有在构造器中为成员变量指定初始值,那么这些成员变量的值将一直是系统分配的默认值,这些成员就失去了存在的意义。

     final修饰的类属性、实例属性可以指定初始值的部分如下:

(1)类属性:必须在静态初始化块或声明该属性时指定初始值。
(2)实例属性:必须在声明该属性或构造器中指定初始值。
 

    final局部变量


        系统不会对局那变量进行初始化,局图变量必须由程序员显式初始化。因此,使用tnal修饰局部变量时,既可以在定义时指定默认值,也可以不指定默认值。
         final 修饰的局部变量在定义时没有指定默认值,则应在后面的代码中对该tinal 变量斌初始值,但只能赋值一次,不能重复赋值。如果 final 修饰的局部变量在定义时已经指定默认值,则后面代码中不能对该变量赋值。 

以上是关于Java 抽象类和接口(部分)的主要内容,如果未能解决你的问题,请参考以下文章

Java 抽象类和接口有什么差别

Java 抽象类和接口(部分)

Java 抽象类和接口(部分)

Java 抽象类和接口(部分)

Java基础5:抽象类和接口

Java基础5:抽象类和接口