面向物件的繼承性和多型性
一.繼承性
繼承是面向物件的一個重要的特性,繼承性反映的是兩個類之間的一種關係。在面向物件的程式設計中,根據已有類派生出新類的這種現象,我們稱之為類的繼承機制。既當一個類具有另一個類的所有方法和屬性時,我們稱之為前者繼承了後者,這兩個類具有繼承關係。被繼承的類我們通常稱為父類或者基類,而繼承父類所有屬性和方法的類為子類或派生類。
繼承是面向物件程式設計設計能夠提高軟體開發效率的重要的原因之一。一個類可以同時派生出多個子類,而這些子類都自動地、隱式的擁有其父類已經定義的屬性和行為。這種父類和子類的繼承關係,其實就是事物的一般性和特徵性的關係,而這種關係恰恰符合了人們對客觀事物的認識過程和思維方式。
Java語言中只支援單繼承,即一個子類只繼承一個父類。這具有重要的地實際意義。它簡化了人們對事物的認識和描述。面向物件程式設計中的繼承性是對客觀世界的直接反映。通過類的繼承能夠實現對問題的深入抽象描述,反映了人們認識世界的發展過程。
繼承是通過關鍵字extends來實現的。
下面是關於繼承的例子:
public class A {
String s="我是A類!!!";
public void showA() {
System.out.println(s);
}
}
//建立一個B類,B繼承與A
public class B extends A{
String s1="我是B類!!!";
public void showB(){
System.out.println(s1);
}
public static void main(String[] args) {
B s1=new B();
s1.showB();
s1.showA();
}
}
二.多型
面向物件的另一重要特性:多型。多型是指應用程式中出現的“重名”現象。多型中允許以統一的風格編寫程式,已處理種類繁多的已存在的類及其相關類。這樣既降低了維護的難度,又節省了時間 。
在Java語言中,多型性主要表現在以下幾個方面:
1.方法過載。方法過載通常是指在同一個類中,相同的方法名對應著不同的方法實現,這些 相同方法名的方法其區別在於方法所需要的引數不同。即採用不同的方法形參表,區分過載方法要求形參在資料型別、個數和順序不同。
方法過載的例子:
public class TestPolymorphism1 {
Sring s="這是方法過載的示例";
String ss="這是類TestPolymorphism1";
public void show(){
System.out.println(ss);
}
public void show(String str){
System.out.println(s);
}
public static void main(String[] args) {
TestPolymorphism1 test=new TestPolymorphism1();
test.show();
test.show(test.s);
}
}
2.方法重寫。方法重寫主要應用與父類和子類之間。子類重寫父類的方法,只是對應得方法實現不同,其方法名與所需的引數都相同。
方法重寫的例子:
//定義類TestPolymorphism1,讓其繼承於類A;
public class TestPolymorphism2 extends A {
String p="這是方法重寫的示例!!!";
public void showA() {
super.showA();
System.out.println(p);
}
public static void main(String[] args) {
TestPolymorphism2 test=new TestPolymorphism2();
test.showA();
}
}
3.抽象類。在Java中,一個類中的方法只給出了標準,而沒有給出具體的實施流程,這樣的類稱為抽象類。抽象類是不能被例項化物件的。父類往往會被定義成抽象類。只給出標準而沒有給出具體實施方法成為抽象方法。
4.介面。在多型機制中,介面比抽象類使用起來更為方便。由抽象方法組成的集合就是介面