Jython的继承能力:单继承和多继承
创始人
2024-04-15 04:50:36
0

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, ...) 

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

【编辑推荐】

  1. 常用Jython方法介绍:init和del
  2. 介绍Jython类:添加定义类属性及隐藏变量
  3. Jython中的对象——面向对象的语言概述
  4. 在Eclipse下配置Jython的简易流程
  5. 使用Jython脚本管理WebSphere资源

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...