日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Jython的繼承能力:?jiǎn)卫^承和多繼承

Jython的繼承

類繼承的能力是面向?qū)ο缶幊痰幕A(chǔ)。Jython 支持單繼承和多繼承。單繼承 意味只有一個(gè)父類,多繼承 意味著可以有多個(gè)父類。

繼承是通過派生其他類實(shí)現(xiàn)的。這些類可以是其他 Jython 類,也可以是 Java 類??梢詮娜魏螖?shù)量的純 Jython 類或者 Java 實(shí)例派生,但是只能(直接或者間接)繼承一個(gè) Java 類。不需要提供一個(gè)父類。

父類中的所有屬性或者方法都存在于所有子類中,并可以被類自身或者所有客戶使用(假定它是 publicly 變量)。在可以使用父類的實(shí)例的所有地方都可以使用子類的所有實(shí)例 ―― 下面是 多態(tài) 的一個(gè)例子。這些功能使重用、快速開發(fā)和容易擴(kuò)展成為可能。

下面是一些繼承的例子:

 
 
 
  1. class Class1: pass # no inheritance  
  2.  
  3. class Class2: pass 
  4.  
  5. class Class3(Class1): pass # single inheritance  
  6.  
  7. class Class4(Class3,Class2): pass # multiple inheritance  
  8.  
  9. from java import awt  
  10. from java import io  
  11.  
  12. # inherit a Java class and interface and a Jython class  
  13. class MyPanel(awt.Panel, io.Serializable, Class2):   
  14.     :  
  15.  

Jython的繼承——將類作為值使用

還可以將類賦值給變量(包括函數(shù)參數(shù))。這使編寫基于類的動(dòng)態(tài)代碼相當(dāng)容易,可以從下面的通用類實(shí)例工廠看到這一點(diǎn):

 
 
 
  1. def instanceMaker(xclass, *args):  
  2.     return apply(xclass, args)  
  3.  
  4. :  
  5.  
  6. x = instanceMaker(MyClass) # same as: x = MyClass()  

Jython的繼承——帶繼承的 init 方法

子類的 __init__ 方法必須調(diào)用其父類定義的所有 __init__ 方法,這不會(huì)自動(dòng)進(jìn)行。下面的兩個(gè)例子展示了如何使用帶繼承的 __init__ 方法。

 
 
 
  1. class Class1(SuperClass):  
  2.     def __init__ (self):            # no arguments  
  3.       SuperClass.__init__(self)     # init my super-class  
  4.       self.data = []                # set implicit data  
  5.  
  6. class Class2(SuperClass):  
  7.     def __init__ (self, v1, v2):    # 2 required arguments  
  8.       SuperClass.__init__(self, v1) # init my super-class with v1  
  9.       self.v2 = v2  

下面是一些帶多繼承的初始化的例子:

 
 
 
  1. class Class1(Super1, Super2):  
  2.     def __init__ (self):             # no arguments  
  3.       Super1.__init__(self)          # init each super-class  
  4.       Super2.__init__(self)  
  5.       self.data = []                 # set implicit data  
  6.  
  7. class Class2(Super1, Super2):  
  8.     def __init__ (self, v1, v2, v3): # 3 required arguments  
  9.       # note you may do work before calling the super __init__ methods  
  10.       self.v3 = v3                   # set data from parameter  
  11.       Super1.__init__(self, v1)      # init each super-class  
  12.       Super2.__init__(self, v2)  

Jython的繼承——調(diào)用父類方法

可以使用類名限定調(diào)用所有父類方法,如下所示:

 
 
 
  1. class Class1:  
  2.     def method1 (self):   
  3.       :  
  4.  
  5. class Class2(Class1):  
  6.     def method1 (self): # override method1  
  7.       :  
  8.       Class1.method1(self) # call my super-class method  
  9.       :  
  10.  
  11.     def method2 (self):   
  12.       :  
  13.  
  14. class Class3(Class2):  
  15.     def method1 (self): # override method1  
  16.       :  
  17.       Class2.method1(self) # call my super-class method  
  18.       :  
  19.  
  20.     def method3 (self):   
  21.       :  
  22.  

注意,次要的方法定義(在 Class2 和 Class3 中)覆蓋了父類定義。不要求子類方法調(diào)用其父類方法,不過,如果它不這樣做,那么它就必須完整地替換父類方法的函數(shù)。

Jython的繼承——調(diào)用方法

有兩種調(diào)用方法的語法(假定有一個(gè)由變量 mci 引用的 MyClass 實(shí)例):

 
 
 
  1. mci.someMethod(...)   
  2. MyClass.someMethod(mci, ...) 

***種形式通常用于類客戶編碼中,而第二種形式更常用于在子類中調(diào)用父類方法。


本文標(biāo)題:Jython的繼承能力:?jiǎn)卫^承和多繼承
分享URL:http://www.5511xx.com/article/coieepj.html