1. 程式人生 > >java基礎學習——9、抽象類

java基礎學習——9、抽象類

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、抽象類