Jython的继承能力:单继承和多继承

Jython的继承

类继承的能力是面向对象编程的基础。Jython 支持单继承和多继承。单继承 意味只有一个父类,多继承 意味着可以有多个父类。

继承是通过派生其他类实现的。这些类可以是其他 Jython 类,也可以是 Java 类。可以从任何数量的纯 Jython 类或者 Java 实例派生,但是只能(直接或者间接)继承一个 Java 类。不需要提供一个父类。

父类中的所有属性或者方法都存在于所有子类中,并可以被类自身或者所有客户使用(假定它是 publicly 变量)。在可以使用父类的实例的所有地方都可以使用子类的所有实例 ―― 下面是 多态 的一个例子。这些功能使重用、快速开发和容易扩展成为可能。

下面是一些继承的例子:

 
 
 
  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的继承——将类作为值使用

还可以将类赋值给变量(包括函数参数)。这使编写基于类的动态代码相当容易,可以从下面的通用类实例工厂看到这一点:

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

Jython的继承——带继承的 init 方法

子类的 __init__ 方法必须调用其父类定义的所有 __init__ 方法,这不会自动进行。下面的两个例子展示了如何使用带继承的 __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的继承——调用父类方法

可以使用类名限定调用所有父类方法,如下所示:

 
 
 
  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 中)覆盖了父类定义。不要求子类方法调用其父类方法,不过,如果它不这样做,那么它就必须完整地替换父类方法的函数。

Jython的继承——调用方法

有两种调用方法的语法(假定有一个由变量 mci 引用的 MyClass 实例):

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

***种形式通常用于类客户编码中,而第二种形式更常用于在子类中调用父类方法。

当前文章:Jython的继承能力:单继承和多继承
文章分享:http://www.shufengxianlan.com/qtweb/news44/381394.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联