Python中的继承与其他语言中的继承在规范上相同吗?与Java的比较示例

2024-09-28 05:24:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我今天一直很困惑,因为(简化的)python代码似乎引发了一个异常

以下是python中的代码:

class AwinBaseOperator:
    def __init__(self):
        self.data = self.get_data(query_url='test')

    def get_data(self, query_url):
        print('Parent called with ', repr(query_url))

class AwinTransactionOperator(AwinBaseOperator):
    def __init__(self):
        super().__init__()

    def get_data(self):
        print('Child called')
        
print(AwinTransactionOperator())

这将返回:Child called with 'test.'

这意味着代码试图在AwinBaseOperator构造函数中使用子类的get_data,这应该是错误的。所以我试图通过将代码翻译成Java并运行它来确认这种行为是不正常的

以下是相关的Java代码:

我创建了一个项目,它的结构就是这样

--- Project
 |---src
   |---Main.java  // Contains the main function call
   |---Awin
     |---AwinBaseOperator.java
     |---AwinTransactionOperator.java

下面是各自的类定义

import Awin.AwinTransactionOperator;


public class Main {
  public static void main(String[] args) {
    AwinTransactionOperator a = new AwinTransactionOperator();
  }
}
package Awin;


public class AwinBaseOperator{
        
     public AwinBaseOperator(){
         this.getData("test");
     }
     
     public void getData(String query_url){
         System.out.println("Parent called getData with "+query_url);
     }
}
package Awin;
import Awin.AwinBaseOperator;


public class AwinTransactionOperator extends AwinBaseOperator{
    
    public AwinTransactionOperator(){
        super();
    }
    
    public void getData(){
        System.out.println("Child called getData");
    }
}

返回Parent called getData with test.

  1. 你能解释一下在处理主要的面向对象概念“继承”时的基本区别吗
  2. 我错过了什么

Tags: 代码testselfurldatagetdefpublic
1条回答
网友
1楼 · 发布于 2024-09-28 05:24:52

Java中显示的示例没有显示Overriding的用法,而是显示Overloading方法getData的用法

一旦我们将AwinTransactionOperator.getData的签名更改为

public void getData(String query_url){
        System.out.println("Child called getData with "+query_url);
}

输出为Child called getData with test

Python不支持重载

相关问题 更多 >

    热门问题