可以使用abstract來修飾乙個類或者方法。
用abstract修飾的類表示這個類是乙個抽象類,用abstract修飾的方法表示這個方法是乙個抽象方法。
抽象類不能被例項化。
抽象方法是只有方法宣告,而沒有方法的實現內容。
可以使用abstract來修飾乙個類。
用abstract修飾的類表示這個類是乙個抽象類。
抽象類不能被例項化。
這是乙個簡單抽象的方法,如果它被直接例項化,系統會報錯。
[php]view plain
copy
<?php
//定義乙個抽象類
abstract
class
user
} //例項化這個類會出現錯誤
echo
newuser();
?>
下面例子的 normaluser 繼承自 user類,就可以被例項化了。
[php]view plain
copy
<?php
//定義乙個抽象類
abstract
class
user
} //例項化這個類會出現錯誤
echo
newuser();
class
normaluser
extends
user
$a= new
normaluser();
echo
"這個類"
. $a
. "的例項"
; ?>
單獨設定乙個抽象類是沒有意義的,只有有了抽象方法,抽象類才有了血肉。下面介紹抽象方法。
用abstract修飾的類表示這個方法是乙個抽象方法。
抽象方法,只有方法的宣告部分,沒有方法體。
抽象方法沒有 {} ,而採用 ; 結束。
乙個類中,只要有乙個抽象方法,這個類必須被宣告為抽象類。
抽象方法在子類中必須被重寫。
下面是乙個抽象類,其中有兩個抽象方法,分別是 setsal() 和 getsal()。用來取回 $sal 員工的工資。
[php]view plain
copy
<?php
abstract
class
user
}
?>
既然user類不能被直接繼承,我們寫乙個normaluser類繼承自user類。當我們寫成如下**時,系統會報錯。 這個錯誤告訴我們,在 user類中有兩個抽象方法,我們必須在子類中重寫這兩個方法。
[php]view plain
copy
<?php
abstract
class
user
} class
normaluser
extends
user
?>
下面例子,重寫了這兩個方法,雖然方法體裡面 {} 的內容是空的,也算重寫了這個方法。注意看重寫方法的引數名稱,這裡只要引數數量一致就可以,不要求引數的名稱必須一致。
[php]view plain
copy
<?php
abstract
class
user
} class
normaluser
extends
user
function
setsal(
$sal
)
} //這樣就不會出錯了。
?>
下面19-21行,三種寫重寫的方式都會報錯。
19行,缺少引數。
20行,引數又多了。
21行,引數型別不對。(這種寫法在以後章節介紹)
乙個類中,如果有乙個抽象方法,這個類必須被宣告為抽象類。
下面這個類不是抽象類,其中定義了乙個抽象方法,會報錯。
[php]view plain
copy
<?php
class
user
} //這個類中有兩個抽象方法,如果這個類不是抽象的。會報錯
?>
抽象類繼承抽象類
抽象類繼承另外乙個抽象類時,不用重寫其中的抽象方法。
抽象類中,不能重寫抽象父類的抽象方法。
這樣的用法,可以理解為對抽象類的擴充套件
下面的例子,演示了乙個抽象類繼承自另外乙個抽象類時,不需要重寫其中的抽象方法。
[php]view plain
copy
<?php
abstract
class
user
abstract
class
vipuser
extends
user
?>
抽象類在被繼承後,其中的抽象方法不能被重寫。
如果發生重寫,系統會報錯。
[php]view plain
copy
<?php
abstract
class
user
abstract
class
vipuser
extends
user
?>
抽象類繼承抽象類,目的對抽象類的擴充套件。
[php]view plain
copy
<?php
abstract
class
user
abstract
class
vipuser
extends
user
?>
在php5.1中,抽象類中支援靜態抽象方法。下面這個例子,看到靜態抽象方法可以宣告。實現這個方法時,必須是靜態的方法。
在php5.1中,抽象類中支援靜態抽象方法。下面這個例子,看到靜態抽象方法可以宣告。實現這個方法時,必須是靜態的方法。
[php]view plain
copy
<?php
abstract
class
user
class
vipuser
extends
user
static
function
setsal(
$sal
)
} vipuser::setsal(100);
echo
"you sal is "
. vipuser::getsal();
?>
//這裡的抽象方法好像沒有問題
abstract抽象類 抽象方法
package com.company.abstract01 1 如何定義抽象類?class 關鍵字前加 abstract 2 抽象類無法被例項化,即抽象類無法建立物件 3 雖然抽象類沒有辦法例項化,但是抽象類也有構造方法,該構造方法是給子類建立物件用的。4 抽象類中可以定義抽象方法 抽象方法的語法...
java 抽象類 抽象方法 abstract
1 abstract 修飾類 抽象類 不能被例項化 擁有構造器 抽象方法所在的類,一定是抽象類 抽象類中可以沒有抽象方法 2 abstract 修飾方法 抽象方法 沒有方法體,包括 如public abstract void eat 抽象方法相當於只保留方法的功能,而具體的執行,交給繼承抽象類的子類...
abstract抽象類練習
1.抽象方法 由abstract修飾的方法 2.特點 沒有方法體 3.抽象類 由abstract修飾的類 模組 4.特點 不能建立物件 5.抽象類中可以沒有抽象方法 6.抽象類由子類建立物件 7.子類可以建立物件,實現所有的抽象方法,沒有實現全部的抽象方法,當前類宣告為抽象類 練習 定義乙個類表示形...