相关疑难解决方法(0)

Java构造函数继承

我想知道为什么java构造函数不会被继承?你知道什么时候有这样的课:

public class Super {

  public Super(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
    this.serviceA = serviceA;
    //etc
  } 

}
Run Code Online (Sandbox Code Playgroud)

稍后当你继承时Super,java会抱怨没有定义默认的构造函数.解决方案显然是这样的:

public class Son extends Super{

  public Son(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
    super(serviceA,serviceB,serviceC);
  }

}
Run Code Online (Sandbox Code Playgroud)

这段代码是重复的,而不是干的和无用的(恕我直言)...所以这又带来了问题:

为什么java不支持构造函数继承?不允许这种继承有什么好处吗?

java inheritance constructor

179
推荐指数
4
解决办法
13万
查看次数

为什么不自动调用超类__init__方法?

为什么Python设计者决定子类的__init__()方法不会__init__()像其他语言那样自动调用超类的方法?Pythonic和推荐的成语是否真的如下?

class Superclass(object):
    def __init__(self):
        print 'Do something'

class Subclass(Superclass):
    def __init__(self):
        super(Subclass, self).__init__()
        print 'Do something else'
Run Code Online (Sandbox Code Playgroud)

python inheritance delegation subclass superclass

146
推荐指数
7
解决办法
7万
查看次数

为什么不将__init__分配给超类的__init__?

为什么我在Python代码中看不到以下内容?

class A:
    def __init__(self, ...):
        # something important

class B(A):
    __init__ = A.__init__
Run Code Online (Sandbox Code Playgroud)

它似乎在我的盒子上使用Python 2.5,2.6,2.7和PyPy 1.8.

相反,我看到以下内容:

class B(A):
    def __init__(self, *args, **kwargs):
        A.__init__(self, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

或使用的东西super.

我更喜欢我的第一个例子(明确比隐含更好!)但我担心它不是出于某种原因而变得犹豫不决.这有什么不对吗?

编辑:是的,我的意思是A.__init__,不是self.__init__

python

4
推荐指数
1
解决办法
164
查看次数