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

开发 后端
本文介绍做为面向对象语言的Jython的继承能力。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, ...) 

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

【编辑推荐】

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

2013-05-29 10:23:36

Android开发移动开发Java面试题

2009-12-16 13:53:51

Ruby多继承

2011-08-24 13:56:27

JavaScript

2017-08-03 15:54:50

Kotlin继承

2015-05-25 09:45:16

Java多继承深入解析

2009-07-08 17:42:26

this属性

2009-11-03 13:54:55

VB.NET继承

2009-06-16 10:20:05

多继承C#

2009-07-02 09:40:14

Hibernate的继

2011-08-31 14:48:33

JavaScript

2012-02-14 09:45:02

JavaScript

2012-02-02 16:13:29

HibernateJava

2011-07-07 13:39:14

Cocoa 框架

2017-07-21 09:40:35

Python类、继承和多态

2009-07-08 17:51:45

constructor

2009-07-08 17:48:18

prototype属性

2011-05-25 16:23:35

Javascript类继承

2009-05-13 11:50:17

C#多继承接口

2011-03-10 14:19:56

JavaScript

2021-12-04 11:17:32

Javascript继承编程
点赞
收藏

51CTO技术栈公众号