java基礎學習——9、抽象類
阿新 • • 發佈:2017-08-07
res 學生類 pub 抽象方法 學習 java study 都是 不同的
一、抽象類的概念和定義
在面向對象的概念中,所有的對象都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。
抽象類的格式:修飾符 abstract class 類名
抽象類往往用來表征對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。 比如,在一個圖形編輯軟件的分析設計過程中,就會發現問題領域存在著圓、三角形這樣一些具體概念,它們是不同的,但是它們又都屬於形狀這樣一個概念,形狀這個概念在問題領域並不是直接存在的,它就是一個抽象概念。而正是因為抽象的概念在問題領域沒有對應的具體概念,所以用以表征抽象概念的抽象類是不能夠實例化的。 不能實例化那具體該怎麽用呢。下面以一個簡單的例子說明。 學生王小明去上海學習Java 這是需求 通過上面的內容我們知道面向對象的主體是學生(面向對象開發主要就是在需求中找到對象)方法是學習 方法實現的功能是(學生+name(王小明)+"去"+address(上海)+"學習java")public abstract class Person { String name="";//即然是人肯定是要有名字的。 int age=0;//年齡 Person(String name,int age){ this.name=name; this.age=age; } abstract void Study(); }
註意了:上面紅色的就是抽象方法。有人會問了,這個方法怎麽沒有方法體。
抽象方法:在類中沒有方法體的方法,就是抽象方法。
抽象類中的抽象方法必須被實現!
如果一個子類沒有實現父類中的抽象方法,則子類也成為了一個抽象類!
抽象類中的普通方法,可以不必實現。
在上面的抽象類中我們定義一個抽象方法 學習
下面我們定義學生這個主體類。學生類中我們多一個地址的定義。
public class Student extends Person { String address="";//多增加一個屬性地址 Student(String name,int age,String address){ super(name,age);//調用超類的構造方法 this.address=address; } @Override void Study(){//實現的抽象方法 System.out.print("學生"+name+" 要去"+address+"學習Java"); } }
下面我們寫一個測試類,測試一下:
public class Test { public static void main(String[] args) { Person perA=new Student("王小明",38,"上海"); perA.Study(); } }
運行後的結果: 學生王小明去上海學習java
java基礎學習——9、抽象類