導航:首頁 > 編程語言 > 關於繼承的編程

關於繼承的編程

發布時間:2024-02-25 22:50:29

java使用什麼關鍵字實現繼承

Java 用關鍵字extends實現繼承,具體為 class 子類名 extends 父類名{}
如果父類中無無參構造函數,記得使用super()調用父類的有參構造函數,如果父類中有抽象方法,也請記得實現

❷ Python面向對象編程之繼承與多態詳解

Python面向對象編程之繼承與多態詳解
本文實例講述了Python面向對象編程之繼承與多態。分享給大家供大家參考,具體如下:
Python 類的繼承
在OOP(Object Oriented Programming)程序設計中,當我們定義一個class的時候,可以從某個現有的class 繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Base class、Super class)。
我們先來定義一個class Person,表示人,定義屬性變數 name 及 sex (姓名和性別);
定義一個方法print_title():當sex是male時,print man;當sex 是female時,print woman。參考如下代碼:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person): # Child 繼承 Person
pass
May = Child("May","female")
Peter = Person("Peter","male")
print(May.name,May.sex,Peter.name,Peter.sex) # 子類繼承父類方法及屬性
May.print_title()
Peter.print_title()

而我們編寫 Child 類,完全可以繼承 Person 類(Child 就是 Person);使用 class subclass_name(baseclass_name) 來表示繼承;

繼承有什麼好處?最大的好處是子類獲得了父類的全部屬性及功能。如下 Child 類就可以直接使用父類的 print_title() 方法

實例化Child的時候,子類繼承了父類的構造函數,就需要提供父類Person要求的兩個屬性變數 name 及 sex:

在繼承關系中,如果一個實例的數據類型是某個子類,那它也可以被看做是父類(May 既是 Child 又是 Person)。但是,反過來就不行(Peter 僅是 Person,而不是Child)。

繼承還可以一級一級地繼承下來,就好比從爺爺到爸爸、再到兒子這樣的關系。而任何類,最終都可以追溯到根類object,這些繼承關系看上去就像一顆倒著的樹。比如如下的繼承樹:

isinstance() 及 issubclass()

Python 與其他語言不同點在於,當我們定義一個 class 的時候,我們實際上就定義了一種數據類型。我們定義的數據類型和Python自帶的數據類型,比如str、list、dict沒什麼兩樣。

Python 有兩個判斷繼承的函數:isinstance() 用於檢查實例類型;issubclass() 用於檢查類繼承。參見下方示例:

class Person(object):
pass
class Child(Person): # Child 繼承 Person
pass
May = Child()
Peter = Person()
print(isinstance(May,Child)) # True
print(isinstance(May,Person)) # True
print(isinstance(Peter,Child)) # False
print(isinstance(Peter,Person)) # True
print(issubclass(Child,Person)) # True

Python 類的多態

在說明多態是什麼之前,我們在 Child 類中重寫 print_title() 方法:若為male,print boy;若為female,print girl
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person): # Child 繼承 Person
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")
May = Child("May","female")
Peter = Person("Peter","male")
print(May.name,May.sex,Peter.name,Peter.sex)
May.print_title()
Peter.print_title()

當子類和父類都存在相同的 print_title()方法時,子類的 print_title() 覆蓋了父類的 print_title(),在代碼運行時,會調用子類的 print_title()

這樣,我們就獲得了繼承的另一個好處:多態。

多態的好處就是,當我們需要傳入更多的子類,例如新增 Teenagers、Grownups 等時,我們只需要繼承 Person 類型就可以了,而print_title()方法既可以直不重寫(即使用Person的),也可以重寫一個特有的。這就是多態的意思。調用方只管調用,不管細節,而當我們新增一種Person的子類時,只要確保新方法編寫正確,而不用管原來的代碼。這就是著名的「開閉」原則:

對擴展開放(Open for extension):允許子類重寫方法函數

對修改封閉(Closed for modification):不重寫,直接繼承父類方法函數

子類重寫構造函數

子類可以沒有構造函數,表示同父類構造一致;子類也可重寫構造函數;現在,我們需要在子類 Child 中新增兩個屬性變數:mother 和 father,我們可以構造如下(建議子類調用父類的構造方法,參見後續代碼):
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
class Child(Person): # Child 繼承 Person
def __init__(self,name,sex,mother,father):
self.name = name
self.sex = sex
self.mother = mother
self.father = father
May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)

若父類構造函數包含很多屬性,子類僅需新增1、2個,會有不少冗餘的代碼,這邊,子類可對父類的構造方法進行調用,參考如下:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
class Child(Person): # Child 繼承 Person
def __init__(self,name,sex,mother,father):
Person.__init__(self,name,sex) # 子類對父類的構造方法的調用
self.mother = mother
self.father = father
May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)

多重繼承

多重繼承的概念應該比較好理解,比如現在需要新建一個類 baby 繼承 Child , 可繼承父類及父類上層類的屬性及方法,優先使用層類近的方法,代碼參考如下:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person):
pass
class Baby(Child):
pass
May = Baby("May","female") # 繼承上上層父類的屬性
print(May.name,May.sex)
May.print_title() # 可使用上上層父類的方法
class Child(Person):
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")
class Baby(Child):
pass
May = Baby("May","female")
May.print_title() # 優先使用上層類的方法

❸ 簡單的java 編程題 關於繼承

package javaapplication4;
public class Rect {
protected int length;/////這個地方不能變成私有屬性,因為後面繼承的類也需要繼承它。
protected int width;
public Rect(int length,int width)
{
this.length=length;
this.width=width;
}
public void setLength(int length)
{this.length=length;<br> }
public void setWidth(int width)
{this.width=width;<br> }
public int getLength()
{return length;<br> }
public int getWidth()
{return width;<br> }
public int getArea()
{return length*width;<br> }
public int getCycle()
{return (length+width)*2;<br> }}
////////////////////////////////////////////////////////////////////////////////////////////////////////
package javaapplication4;
public class PlainRect extends Rect
{///此類並未繼承父類的長寬屬性,所以父類的設計是不合理的。應將其屬性改為protected.
protected int startX,startY;
public PlainRect(int length,int width,int startx,int starty)
{
super(length,width);
startX=startx;
startY=starty;
}
public PlainRect()
{
super(0,0);
startX=0;
startY=0;
}
public boolean isInside(double x,double y)
{
boolean b=false;
if(x>startX&&x<startX+length)
if(y>startY&&y<startY+width)
b=true;
return b; }}
////////////////////////////////////////////////////////////////////////////////////////////////////////
package javaapplication4;
public class Main {
public static void main(String[] args) {
PlainRect Pr1=new PlainRect(20,10,10,10);
System.out.println("面積為:"+Pr1.getArea());
System.out.println("周長為:"+Pr1.getCycle());
System.out.println("點(25.5,13)"+(Pr1.isInside(25.5, 13)?"在":"不在")+"此方形內");
} }

❹ java編程 繼承關系

/*
* 定義交通工具,汽車,火車,飛機這些類,注意它們的繼承關系,為這些類提供超出3個不同的構造器
*/
class Transport {

public Transport() {
}
}

class Bus extends Transport {

private String busName;

public Bus(String busName) {
this.busName = busName;
}
}

class Train extends Transport {

private String trainName;
private double trainSpeed;

public Train(String trainName, double trainSpeed) {
this.trainName = trainName;
this.trainSpeed = trainSpeed;
}
}

class Airplane extends Transport {

private String airplaneName;
private double airplaneSpeed;
private String Voyage;

public Airplane(String airplaneName, double airplaneSpeed, String Voyage) {
this.airplaneName = airplaneName;
this.airplaneSpeed = airplaneSpeed;
this.Voyage = Voyage;
}
}

閱讀全文

與關於繼承的編程相關的資料

熱點內容
龍貓電影免費觀看普通話 瀏覽:251
pubg體驗服為什麼伺服器爆滿 瀏覽:60
鈑金編程排版哪裡有視頻可以參考 瀏覽:29
文件夾用於干什麼 瀏覽:508
如色房加密路線 瀏覽:40
阿帕奇web伺服器干什麼用 瀏覽:12
豆豆的書在哪個app可以看 瀏覽:429
基本的編程思想 瀏覽:979
app慕課在哪裡綁定微信 瀏覽:183
加密貨幣央行最新消息 瀏覽:974
伺服器L12是什麼意思 瀏覽:405
關於大海的英語電影 瀏覽:564
日本推理電影榜 瀏覽:571
快手上的影視小短片哪裡找的 瀏覽:59
大香蕉人在線觀看1 瀏覽:922
android獲得根目錄 瀏覽:95
文件目錄類命令有哪些 瀏覽:174
宅男午夜電影在線免費 瀏覽:224
大數據filetypepdf 瀏覽:8
高中作文app軟體哪個好排名 瀏覽:344