日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
python系統(tǒng)函數(shù)重寫,python 重寫

Python自定義的類,為什么需要重寫

首先,自定義的類在不繼承任何基類的情況下,也具有__str__屬性:

成都創(chuàng)新互聯(lián)公司業(yè)務(wù)包括:成品網(wǎng)站、企業(yè)產(chǎn)品展示型網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、電子商務(wù)型網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)(多語言)、商城建設(shè)定制網(wǎng)站開發(fā)、成都營銷網(wǎng)站建設(shè)等。效率優(yōu)先,品質(zhì)保證,用心服務(wù)是我們的核心價值觀,我們將繼續(xù)以良好的信譽(yù)為基礎(chǔ),秉承穩(wěn)固與發(fā)展、求實(shí)與創(chuàng)新的精神,為客戶提供更全面、更優(yōu)質(zhì)的互聯(lián)網(wǎng)服務(wù)!

[python] view plain copy

class RoundFloatManual(object):

... def __init__(self, val):

... assert isinstance(val, float), \

... "Value must be a float!"

... self.value = round(val, 2)

rfm = RoundFloatManual(5.590464)

dir(rfm)

返回:

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'value']

__str__ 是 Python 類中的特殊方法,他的回傳值就是使用 str(x) 所得到的值, 而 print(x) 其實(shí)就等於是print(str(x)).其實(shí)再講細(xì)一點(diǎn),當(dāng)我們呼叫 str(x) 的時候其實(shí)是呼叫x.__str__()

也就是說我們可以這樣想像:

print(x) === print(str(x)) === print(x.__str__())

一般我們 自定義的類,__str__ 方法的回傳值是默認(rèn)的字串,比如說: __main__.Mylist object at 0x0071A470 用以說明 namespace, class name 和位置.如果要改變__str__ 的回傳值,我們必須要覆寫他.

python怎么重寫集合方法

class Set(object):

def __init__(self,data=None):

if data == None:

self.__data = []

else:

if not hasattr(data,'__iter__'):

#提供的數(shù)據(jù)不可以迭代,實(shí)例化失敗

raise Exception('必須提供可迭代的數(shù)據(jù)類型')

temp = []

for item in data:

#集合中的元素必須是可哈希

hash(item)

if not item in temp:

temp.append(item)

self.__data = temp

#析構(gòu)函數(shù)

def __del__(self):

del self.__data

#添加元素,要求元素必須可哈希

def add(self, other):

hash(other)

if other not in self.__data:

self.__data.append(other)

else:

print('元素已存在,操作被忽略')

#刪除元素

def remove(self,other):

if other in self.__data:

self.__data.remove(other)

print('刪除成功')

else:

print('元素不存在,刪除操作被忽略')

#隨機(jī)彈出并返回一個元素

def pop(self):

if not self.__dat:

print('集合已空,彈出操作被忽略')

return

import random

item = random.choice(self.__data)

self.__data.remove(item)

return item

#運(yùn)算符重載,集合差集運(yùn)算

def __sub__(self, other):

if not isinstance(other,Set):

raise Exception('類型錯誤')

#空集合

result = Set()

#如果一個元素屬于當(dāng)前集合而不屬于另一個集合,添加

for item in self.__data:

if item not in other.__data:

result.__data.append(item)

return result

#提供方法,集合差集運(yùn)算,復(fù)用上面的代碼

def difference(self,other):

return self - other

#|運(yùn)算符重載,集合并集運(yùn)算

def __or__(self, other):

if not isinstance(other,Set):

raise Exception('類型錯誤')

result = Set(self.__data)

for item in other.__data:

if item not in result.__data:

result.__data.append(item)

return result

#提供方法,集合并集運(yùn)算

def union(self,otherSet):

return self | otherSet

#運(yùn)算符重載,集合交集運(yùn)算

def __and__(self, other):

if not isinstance(other,Set):

raise Exception('類型錯誤')

result = Set()

for item in self.__data:

if item in other.__data:

result.__data.append(item)

return result

#^運(yùn)算符重載,集合對稱差集

def __xor__(self, other):

return (self-other) | (other-self)

#提供方法,集合對稱差集運(yùn)算

def symetric_difference(self,other):

return self ^ other

#==運(yùn)算符重載,判斷兩個集合是否相等

def __eq__(self, other):

if not isinstance(other,Set):

raise Exception('類型錯誤')

if sorted(self.__data) == sorted(other.__data):

return True

return False

#運(yùn)算符重載,集合包含關(guān)系

def __gt__(self, other):

if not isinstance(other,Set):

raise Exception('類型錯誤')

if self != other:

flag1 = True

for item in self.__data:

if item not in other.__data:

#當(dāng)前集合中有的元素不屬于另一個集合

flag1 = False

break

flag2 = True

for item in other.__data:

if item not in self.__data:

#另一集合中的元素不屬于當(dāng)前集合

flag2 = False

break

if not flag1 and flag2:

return True

return False

#=運(yùn)算符重載,集合包含關(guān)系

def __ge__(self, other):

if not isinstance(other,Set):

raise Exception('類型錯誤')

return self == other or self other

#提供方法,判斷當(dāng)前集合是否為另一個集合的真子集

def issubset(self,other):

return selfother

#提供方法,判斷當(dāng)前集合是否為另一集合的超集

def issuperset(self,other):

return self other

#提供方法,清空集合所有元素

def clear(self):

while self.__data:

del self.__data[-1]

print('集合已清空')

#運(yùn)算符重載,使得集合可迭代

def __iter__(self):

return iter(self.__data)

#運(yùn)算符重載,支持in運(yùn)算符

def __contains__(self, item):

return item in self.__data

#支持內(nèi)置函數(shù)len()

def __len__(self):

return len(self.__data)

#直接查看該類對象時調(diào)用該函數(shù)

def __repr__(self):

return '{'+str(self.__data)[1:-1]+'}'

#使用print()函數(shù)輸出該類對象時調(diào)用該函數(shù)

__str__ = __repr__

python的三大特征

第一點(diǎn):封裝

隱藏對象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對外提供公共訪問方式,在Python中用雙下線開頭的方式將屬性設(shè)置成私有的。

擁有三個好處:將變化隔離,便于使用,提高復(fù)用性,提高安全性。

第二點(diǎn):繼承

繼承是一種創(chuàng)建新類的方式,在Python中,新建的類可以繼承一個或多個父類,父類又被稱為基類或超類,新建的類稱為派生類或子類。即一個派生類繼承基類的字段和方法,繼承也允許把一個派生類的對象作為一個基類對象對待。

第三點(diǎn):多態(tài)

一種事物的多種體現(xiàn)形式,函數(shù)的重寫其實(shí)就是多態(tài)的一種體現(xiàn)。Python中,多態(tài)指是父類的引用指向子類的對象。

實(shí)現(xiàn)多態(tài)的步驟:

1. 定義新的子類;

2. 重寫對應(yīng)的父類方法;

3. 使用子類的方法直接處理,不調(diào)用父類的方法;

多態(tài)的好處:

1. 增加了程序的靈活性;

2. 增加了程序的可擴(kuò)展性。

簡述python面向?qū)ο缶幊讨泻瘮?shù)重載和重寫的區(qū)別

這個基本是沒有一點(diǎn)關(guān)聯(lián)。。。只是名字容易混淆而已 重寫就是對父類的方法重寫,改變方法體中的語句。。。。 重載就是同一個函數(shù)名,參數(shù)個數(shù)、類型、排列順序不同,jvm根據(jù)參數(shù)來決定調(diào)用哪一個方法

在Python中定義Main函數(shù)

目錄

許多編程語言都有一個特殊的函數(shù),當(dāng)操作系統(tǒng)開始運(yùn)行程序時會自動執(zhí)行該函數(shù)。這個函數(shù)通常被命名為main(),并且依據(jù)語言標(biāo)準(zhǔn)具有特定的返回類型和參數(shù)。另一方面,Python解釋器從文件頂部開始執(zhí)行腳本,并且沒有自動執(zhí)行的特殊函數(shù)。

盡管如此,為程序的執(zhí)行定義一個起始點(diǎn)有助于理解程序是如何運(yùn)行的。Python程序員提出了幾種方式對此進(jìn)行實(shí)現(xiàn)。

本文結(jié)束時,您將了解以下內(nèi)容:

Python中的基本main()函數(shù)

一些Python腳本中,包含一個函數(shù)定義和一個條件語句,如下所示:

此代碼中,包含一個main()函數(shù),在程序執(zhí)行時打印Hello World!。此外,還包含一個條件(或if)語句,用于檢查__name__的值并將其與字符串"__main__"進(jìn)行比較。當(dāng)if語句為True時,Python解釋器將執(zhí)行main()函數(shù)。更多關(guān)于Python條件語句的信息可以由此獲得。

這種代碼模式在Python文件中非常常見,它將作為腳本執(zhí)行并導(dǎo)入另一個模塊。為了幫助理解這段代碼的執(zhí)行方式,首先需要了解Python解釋器如何根據(jù)代碼的執(zhí)行方式設(shè)置__name__。

Python中的執(zhí)行模式

Python解釋器執(zhí)行代碼有兩種方式:

更多內(nèi)容可參考如何運(yùn)行Python腳本。無論采用哪種方式,Python都會定義一個名為__name__的特殊變量,該變量包含一個字符串,其值取決于代碼的使用方式。

本文將如下示例文件保存為execution_methods.py,以 探索 代碼如何根據(jù)上下文改變行為:

在此文件中,定義了三個對print()函數(shù)的調(diào)用。前兩個打印一些介紹性短語。第三個print()會先打印短語The value __name__ is,之后將使用Python內(nèi)置的repr()函數(shù)打印出__name__變量。

在Python中,repr()函數(shù)將對象轉(zhuǎn)化為供解釋器讀取的形式。上述示例通過使用repr()函數(shù)來強(qiáng)調(diào)__name__的值為字符串。更多關(guān)于repr()的內(nèi)容可參考Python文檔。

在本文中,您將隨處可見文件(file),模塊(module)和腳本(script)這三個字眼。實(shí)際上,三者之間并無太大的差別。不過,在強(qiáng)調(diào)代碼目的時,還是存在細(xì)微的差異:

“如何運(yùn)行Python腳本”一文也討論了三者的差別。

基于命令行執(zhí)行

在這類方法中,Python腳本將通過命令行來執(zhí)行。

執(zhí)行腳本時,無法與Python解釋器正在執(zhí)行的代碼交互。關(guān)于如何通過命令行執(zhí)行代碼的詳細(xì)信息對本文而言并不重要,但您可以通過展開下框閱讀更多有關(guān)Windows,Linux和macOS之間命令行差異的內(nèi)容。

命令行環(huán)境

不同的操作系統(tǒng)在使用命令行執(zhí)行代碼時存在細(xì)微的差異。

在Linux和macOS中,通常使用如下命令:

美元符號($)之前的內(nèi)容可能有所不同,具體取決于您的用戶名和計算機(jī)名稱。您鍵入的命令位于$之后。在Linux或macOS上,Python3的可執(zhí)行文件名為python3,因此可以通過輸入python3 script_name.py來運(yùn)行python腳本。

在Windows上,命令提示符通常如下所示:

根據(jù)您的用戶名,之前的內(nèi)容可能會有所不同,您輸入的命令位于之后。在Windows上,Python3的可執(zhí)行文件通常為python。因此可以通過輸入python script_name.py來運(yùn)行python腳本。

無論哪種操作系統(tǒng),本文的Python腳本的輸出結(jié)果都是相同的。因此本文以Linux和macOS為例。

使用命令行執(zhí)行execution_methods.py,如下所示:

在這個示例中,__name__具有值'__main__',其中引號(')表明該值為字符串類型。

請記住,在Python中,使用單引號(')和雙引號(")定義的字符串沒有區(qū)別。更多關(guān)于字符串的內(nèi)容請參考Python的基本數(shù)據(jù)類型。

如果在腳本中包含"shebang行"并直接執(zhí)行它(./execution_methods.py),或者使用IPython或Jupyter Notebook的%run,將會獲取相同的結(jié)果。

您還可以通過向命令行添加-m參數(shù)的方法實(shí)現(xiàn)以模塊的方式執(zhí)行。通常情況下,推薦如下方式pip: python3 -m pip install package_name。

添加-m參數(shù)將會運(yùn)行包中__main__.py的代碼。更多關(guān)于__main__.py文件的內(nèi)容可參考如何將開源Python包發(fā)布到PyPI中。

在三種情況中,__name__都具有相同的值:字符串'__main__'。

技術(shù)細(xì)節(jié):Python文檔中具體定義了__name__何時取值為'__main__'。

當(dāng)通過標(biāo)準(zhǔn)輸入,腳本或者交互提示中讀取數(shù)據(jù)時,模塊的__name__將取值為'__main__'。(來源)

__name__與__doc__,__package__和其他屬性一起存儲在模塊的全局命名空間。更多關(guān)于屬性的信息可參考Python數(shù)據(jù)模型文檔,特別是關(guān)于模塊和包的信息,請參閱Python Import文檔。

導(dǎo)入模塊或解釋器

接下來是Python解釋器執(zhí)行代碼的第二種方式:導(dǎo)入。在開發(fā)模塊或腳本時,可以使用import關(guān)鍵字導(dǎo)入他人已經(jīng)構(gòu)建的模塊。

在導(dǎo)入過程中,Python執(zhí)行指定模塊中定義的語句(但僅在第一次導(dǎo)入模塊時)。要演示導(dǎo)入execution_methods.py文件的結(jié)果,需要啟動Python解釋器,然后導(dǎo)入execution_methods.py文件:

在此代碼輸出中,Python解釋器執(zhí)行了三次print()函數(shù)調(diào)用。前兩行由于沒有變量,在輸出方面與在命令行上作為腳本執(zhí)行時完全相同。但是第三個輸出存在差異。

當(dāng)Python解釋器導(dǎo)入代碼時,__name__的值與要導(dǎo)入的模塊的名稱相同。您可以通過第三行的輸出了解這一點(diǎn)。__name__的值為'execution_methods',是Python導(dǎo)入的.py文件。

注意如果您在沒有退出Python時再次導(dǎo)入模塊,將不會有輸出。

注意:更多關(guān)于導(dǎo)入在Python中如何工作的內(nèi)容請參考官方文檔和Python中的絕對和相對導(dǎo)入。

Main函數(shù)的最佳實(shí)踐

既然您已經(jīng)了解兩種執(zhí)行方式上的差異,那么掌握一些最佳實(shí)踐方案還是很有用的。它們將適用于編寫作為腳本運(yùn)行的代碼或者在另一個模塊導(dǎo)入的代碼。

如下是四種實(shí)踐方式:

將大部分代碼放入函數(shù)或類中

請記住,Python解釋器在導(dǎo)入模塊時會執(zhí)行模塊中的所有代碼。有時如果想要實(shí)現(xiàn)用戶可控的代碼,會導(dǎo)致一些副作用,例如:

在這種情況下,想要實(shí)現(xiàn)用戶控制觸發(fā)此代碼的執(zhí)行,而不是讓Python解釋器在導(dǎo)入模塊時執(zhí)行代碼。

因此,最佳方法是將大部分代碼包含在函數(shù)或類中。這是因為當(dāng)Python解釋器遇到def或class關(guān)鍵字時,它只存儲這些定義供以后使用,并且在用戶通知之前不會實(shí)際執(zhí)行。

將如下代碼保存在best_practices.py以證明這個想法:

在此代碼中,首先從time模塊中導(dǎo)入sleep()。

在這個示例中,參數(shù)以秒的形式傳入sleep()函數(shù)中,解釋器將暫停一段時間再運(yùn)行。隨后,使用print()函數(shù)打印關(guān)于代碼描述的語句。

之后,定義一個process_data()函數(shù),執(zhí)行如下五項操作:

在命令行中執(zhí)行

當(dāng)你將此文件作為腳本用命令行執(zhí)行時會發(fā)生什么呢?

Python解釋器將執(zhí)行函數(shù)定義之外的from time import sleep和print(),之后將創(chuàng)建函數(shù)process_data()。然后,腳本將退出而不做任何進(jìn)一步的操作,因為腳本沒有任何執(zhí)行process_data()的代碼。

如下是這段腳本的執(zhí)行結(jié)果:

我們在這里看到的輸出是第一個print()的結(jié)果。注意,從time導(dǎo)入和定義process_data()函數(shù)不產(chǎn)生結(jié)果。具體來說,調(diào)用定義在process_data()內(nèi)部的print()不會打印結(jié)果。

導(dǎo)入模塊或解釋器執(zhí)行

在會話(或其他模塊)中導(dǎo)入此文件時,Python解釋器將執(zhí)行相同的步驟。

Python解釋器導(dǎo)入文件后,您可以使用已導(dǎo)入模塊中定義的任何變量,類或函數(shù)。為了證明這一點(diǎn),我們將使用可交互的Python解釋器。啟動解釋器,然后鍵入import best_practices:

導(dǎo)入best_practices.py后唯一的輸出來自process_data()函數(shù)外定義的print()。導(dǎo)入模塊或解釋器執(zhí)行與基于命令行執(zhí)行類似。

使用__name__控制代碼的執(zhí)行

如何實(shí)現(xiàn)基于命令行而不使用Python解釋器導(dǎo)入文件來執(zhí)行呢?

您可以使用__name__來決定執(zhí)行上下文,并且當(dāng)__name__等于"__main__"時才執(zhí)行process_data()。在best_practices.py文件中添加如下代碼:

這段代碼添加了一個條件語句來檢驗__name__的值。當(dāng)值為"__main__"時,條件為True。記住當(dāng)__name__變量的特殊值為"__main__"時意味著Python解釋器會執(zhí)行腳本而不是將其導(dǎo)入。

條件語塊內(nèi)添加了四行代碼(第12,13,14和15行):

現(xiàn)在,在命令行中運(yùn)行best_practices.py,并觀察輸出的變化:

首先,輸出顯示了process_data()函數(shù)外的print()的調(diào)用結(jié)果。

之后,data的值被打印。因為當(dāng)Python解釋器將文件作為腳本執(zhí)行時,變量__name__具有值"__main__",因此條件語句被計算為True。

接下來,腳本將調(diào)用process_data()并傳入data進(jìn)行修改。當(dāng)process_data執(zhí)行時,將輸出一些狀態(tài)信息。最終,將輸出modified_data的值。

現(xiàn)在您可以驗證從解釋器(或其他模塊)導(dǎo)入best_practices.py后發(fā)生的事情了。如下示例演示了這種情況:

注意,當(dāng)前結(jié)果與將條件語句添加到文件末尾之前相同。因為此時__name__變量的值為"best_practices",因此條件語句結(jié)果為False,Python將不執(zhí)行process_data()。

創(chuàng)建名為main()的函數(shù)來包含要運(yùn)行的代碼

現(xiàn)在,您可以編寫作為腳本由從命令行執(zhí)行并導(dǎo)入且沒有副作用的Python代碼。接下來,您將學(xué)習(xí)如何編寫代碼并使其他程序員能輕松地理解其含義。

許多語言,如C,C++,Java以及其他的一些語言,都會定義一個叫做main()的函數(shù),當(dāng)編譯程序時,操作系統(tǒng)會自動調(diào)用該函數(shù)。此函數(shù)通常被稱為入口點(diǎn)(entry point),因為它是程序進(jìn)入執(zhí)行的起始位置。

相比之下,Python沒有一個特殊的函數(shù)作為腳本的入口點(diǎn)。實(shí)際上在Python中可以將入口點(diǎn)定義成任何名稱。

盡管Python不要求將函數(shù)命名為main(),但是最佳的做法是將入口點(diǎn)函數(shù)命名為main()。這樣方便其他程序員定位程序的起點(diǎn)。

此外,main()函數(shù)應(yīng)該包含Python解釋器執(zhí)行文件時要運(yùn)行的任何代碼。這比將代碼放入條件語塊中更好,因為用戶可以在導(dǎo)入模塊時重復(fù)使用main()函數(shù)。

修改best_practices.py文件如下所示:

在這個示例中,定義了一個main()函數(shù),它包含了上面的條件語句塊。之后修改條件語塊執(zhí)行main()。如果您將此代碼作為腳本運(yùn)行或?qū)?,將獲得與上一節(jié)相同的輸出。

在main()中調(diào)用其他函數(shù)

另一種常見的實(shí)現(xiàn)方式是在main()中調(diào)用其他函數(shù),而不是直接將代碼寫入main()。這樣做的好處在于可以實(shí)現(xiàn)將幾個獨(dú)立運(yùn)行的子任務(wù)整合。

例如,某個腳本有如下功能:

如果在單獨(dú)的函數(shù)中各自實(shí)現(xiàn)這些子任務(wù),您(或其他用戶)可以很容易地實(shí)現(xiàn)代碼重用。之后您可以在main()函數(shù)中創(chuàng)建默認(rèn)的工作流。

您可以根據(jù)自己的情況選擇是否使用此方案。將任務(wù)拆分為多個函數(shù)會使重用更容易,但會增加他人理解代碼的難度。

修改best_practices.py文件如下所示:

在此示例代碼中,文件的前10行具有與之前相同的內(nèi)容。第12行的第二個函數(shù)創(chuàng)建并返回一些示例數(shù)據(jù),第17行的第三個函數(shù)模擬將修改后的數(shù)據(jù)寫入數(shù)據(jù)庫。

第21行定義了main()函數(shù)。在此示例中,對main()做出修改,它將調(diào)用數(shù)據(jù)讀取,數(shù)據(jù)處理以及數(shù)據(jù)寫入等功能。

首先,從read_data_from_web()中創(chuàng)建data。將data作為參數(shù)傳入process_data(),之后將返回modified_data。最后,將modified_data傳入write_data_to_database()。

腳本的最后兩行是條件語塊用于驗證__name__,并且如果if語句為True,則執(zhí)行main()。

在命令行中運(yùn)行如下所示:

根據(jù)執(zhí)行結(jié)果,Python解釋器在執(zhí)行main()函數(shù)時,將依次執(zhí)行read_data_from_web(),process_data()以及write_data_to_database()。當(dāng)然,您也可以導(dǎo)入best_practices.py文件并重用process_data()作為不同的數(shù)據(jù)輸入源,如下所示:

在此示例中,導(dǎo)入了best_practices并且將其簡寫為bp。

導(dǎo)入過程會導(dǎo)致Python解釋器執(zhí)行best_practices.py的全部代碼,因此輸出顯示解釋文件用途的信息。

然后,從文件中存儲數(shù)據(jù)而不是從Web中讀取數(shù)據(jù)。之后,可以重用best_practices.py文件中的process_data()和write_data_to_database()函數(shù)。在此情況下,可以利用代碼重寫來取代在main()函數(shù)中實(shí)現(xiàn)全部的代碼邏輯。

實(shí)踐總結(jié)

以下是Python中main()函數(shù)的四個關(guān)鍵最佳實(shí)踐:

結(jié)論

恭喜!您現(xiàn)在已經(jīng)了解如何創(chuàng)建Python main()函數(shù)了。

本文介紹了如下內(nèi)容:

現(xiàn)在,您可以開始編寫一些非常棒的關(guān)于Python main()函數(shù)代碼啦!

python 重載和重寫的區(qū)別

重載和重寫,這是兩個新概念,是兩個令我們?nèi)菀谆煜母拍?。方法重載(overloading method)

是在一個類里面,方法名字相同,而參數(shù)不同。返回類型呢?可以相同也可以不同。方法重寫(overiding method)

子類不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的

一種手段。Java的方法重載,就是在類中可以創(chuàng)建多個方法,它們具有相同的名字,但具有不同的參數(shù)和不同的定義。調(diào)用方法時通過傳遞給它們的不同個數(shù)和

類型的參數(shù)來決定具體使用哪個方法,

這就是多態(tài)性。方法重寫:在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類并不想原封不動地繼承父類的方法,而是想作一定

的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。

若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數(shù)表,則新方法將覆蓋原有的方法。

如需父類中原有的方法,可使用super關(guān)鍵字,該關(guān)鍵字引用了當(dāng)前類的父類重寫方法的規(guī)則:

參數(shù)列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是重載.

返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載.訪問修飾符的限制一定要大于被重寫方法的訪問修飾符

(publicprotecteddefaultprivate)重寫方法一定不能拋出新的檢查異?;蛘弑缺恢貙懛椒ㄉ昝鞲訉?/p>

泛的檢查型異常.例如,父類的一個方法申明了一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出

IOException的子類異常,可以拋出非檢查異常.重載的規(guī)則:必須具有不同的參數(shù)列表;可以有不同的返回類型,只要參數(shù)列表不同就可以

了;可以有不同的訪問修飾符;可以拋出不同的異常;注意,Java的方法重載要求同名的方法必須有不同的參數(shù)表,僅有返回類型不同是不足以區(qū)分兩

個重載的方法。重寫方法只能存在于具有繼承關(guān)系中,重寫方法只能重寫父類非私有的方法。下面分別舉一個例子來說明方法重載:public class

TestOverLoad{ public static void main(String[] args) {Test test = new

Test(); test.print(null); } }class Test{ public void print(String

some){System.out.println("String version print"); } public void

print(Object some){ System.out.println("Object version print");

}}該程序輸出的結(jié)果是String version print。


網(wǎng)站題目:python系統(tǒng)函數(shù)重寫,python 重寫
鏈接URL:http://www.dlmjj.cn/article/hcdcoe.html