相关疑难解决方法(0)

Python:继承超类__init__

我有一个有很多__init__参数的基类:

def BaseClass(object):
    def __init__(self, a, b, c, d, e, f, ...):
        self._a=a+b
        self._b=b if b else a
        ...
Run Code Online (Sandbox Code Playgroud)

所有继承类都应该运行__init__基类的方法.

我可以__init__()在每个将调用超类的继承类中编写一个方法__init__,但这将是一个严重的代码重复:

def A(BaseClass):
    def __init__(self, a, b, c, d, e, f, ...):
        super(A, self).__init__(a, b, c, d, e, f, ...)

def B(BaseClass):
    def __init__(self, a, b, c, d, e, f, ...):
        super(A, self).__init__(a, b, c, d, e, f, ...)

def C(BaseClass):
    def __init__(self, a, b, c, d, e, f, ...):
        super(A, self).__init__(a, …
Run Code Online (Sandbox Code Playgroud)

python inheritance constructor init

58
推荐指数
5
解决办法
6万
查看次数

为什么在构造函数上没有定义inheritedDoc?

我想知道为什么javadoc不支持inheritedDoc是有正当理由的constructors.假设我有

class A
{
/**
 * Constructor of A
 */
A(){}   

/**
 * Does something
 */
public void method(){}
}

class B extends A
{
/**
 * {@inheritDoc}
 */
B(){ super();}

/**
 * {@inheritDoc}
 */
public void method(){}
}
Run Code Online (Sandbox Code Playgroud)

对于该方法method,我可以继承javadoc,但为什么同样不能应用constructors?除非我使用inheritDoc标记,否则javadoc不会继承,这意味着我很清楚我想重用文档.什么应该阻止我这样做constructors

java documentation javadoc

16
推荐指数
4
解决办法
3954
查看次数

不能直接调用超类型构造函数 - 为什么不呢?

我在Java中有以下示例类:

public class A { }

public class Super {
    protected Super() { }
    public Super(A a) { }
}

public class Sub extends Super { }

public class Consumer {
    public Consumer() {
        Sub sub = new Sub(new A()); //compiler error
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器错误表明参数不能应用于Sub中的默认构造函数,这是完全可以理解的.

我很好奇的是这个决定背后的理由.Java生成默认的空构造函数Sub; 为什么不能在这种情况下在幕后调用呢?这主要是理智的手持,还是有技术原因?

编辑

我知道的是这是一个语言的限制.我很好奇为什么它是一种语言限制.

编辑2

看起来,通常情况下,我太过接近我实际工作的代码,看看大局.我在下面的答案中发布了一个反例,说明了为什么这是BadThing®.

java constructor

6
推荐指数
1
解决办法
604
查看次数

Java:构造函数和方法如何使用继承行为

Java似乎与类构造函数和方法处理继承的方式不一致.

案例1 - 方法:

public class HelloWorld
{
  public static void main(String[] args)
  {
    Bee b = new Bee();
    b.foo();
  }
}

class Insect {
  public void foo() {
    this.bar();
    System.out.println("Insect foo");
  }

  public void bar() {
    System.out.println("Insect bar");
  }
}

class Bee extends Insect {
  @Override
  public void foo() {
    super.foo();
    System.out.println("Bee foo");
  }

  @Override
  public void bar() {
    System.out.println("Bee bar");
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码输出如下:

蜜蜂吧

昆虫foo

蜜蜂

请注意,在Insect的foo()方法中调用"this.bar()"实际上会返回并调用Bee的bar()方法(而不是调用Insect的bar()方法).

案例2 - 构造函数:

public class HelloWorld
{
  public static void main(String[] …
Run Code Online (Sandbox Code Playgroud)

java inheritance

5
推荐指数
1
解决办法
161
查看次数

Java - 扩展类

我有一个Meeting类,我想创建一个扩展Meeting的BusinessMeeting类.

这是我的Meeting类:

public class Meeting {

private String name;
private String location;
private int start, stop;

public Meeting(String name, String location, int start, int stop) {

    this.name = name;

    this.location = location;

    this.start = start;

    this.stop = stop;

}
Run Code Online (Sandbox Code Playgroud)

这是我的BusinessMeeting类:

public class BusinessMeeting extends Meeting {

    public BusinessMeeting() {

        super();

    }

}
Run Code Online (Sandbox Code Playgroud)

在我的BusinessMeeting类中,我收到错误:

构造函数类会议中的会议不能应用于给定类型; required:String,String,int,int found:无参数

我不确定为什么我收到该错误消息.BusinessMeeting类不应该继承Meeting类中的所有变量吗?

java inheritance

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

为什么构造函数不是继承的?

我一直在使用Eclipse Juno学习继承中的构造函数.

当我在childClass中按两次ctrl + O时,它显示继承的成员.但我碰巧在继承的成员中甚至看到超类的构造函数

但据说构造函数不是继承的......

有人可以解释一下这种行为吗?

java eclipse inheritance

3
推荐指数
2
解决办法
1万
查看次数

java中构造函数的继承

每当在任何派生类中调用任何构造函数时,任务只能通过最终隐式或显式地调用基类构造函数来完成(如果我在这里错了,请纠正我).

因为我们打算创建派生类的实例,但是因为最后调用了基类构造函数.

那么,尽管调用了基类的构造函数,如何构造派生类的实例?

java class-constructors inheriting-constructors

2
推荐指数
1
解决办法
548
查看次数

我应该定义一个构造函数是一个扩展抽象类的类吗?

如果我有这个抽象类:

package com.abc;

public abstract class Player {
    private String name;

    public Player(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我从抽象类中扩展一个新类时,新类默认使用继承的构造函数,还是必须创建一个调用"super"的构造函数?

java

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