标签: inheritance

有没有办法在Java中覆盖类变量?

class Dad
{
    protected static String me = "dad";

    public void printMe()
    {
        System.out.println(me);
    }
}

class Son extends Dad
{
    protected static String me = "son";
}

public void doIt()
{
    new Son().printMe();
}
Run Code Online (Sandbox Code Playgroud)

功能doIt将打印"爸爸".有没有办法让它打印"儿子"?

java inheritance overriding

152
推荐指数
8
解决办法
18万
查看次数

在Python中,我如何表明我重写了一个方法?

例如,在Java中,@Override注释不仅提供了覆盖的编译时检查,而且还提供了出色的自我记录代码.

我只是在寻找文件(尽管如果它是一些像pylint这样的检查器的指示器,那就是奖金).我可以在某处添加注释或docstring,但是在Python中指示覆盖的惯用方法是什么?

python inheritance overriding self-documenting-code

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

为什么不自动调用超类__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万
查看次数

145
推荐指数
9
解决办法
10万
查看次数

接口是否继承自java中的Object类

接口是否继承自ObjectJava中的类?

如果没有那么我们如何能够在接口实例上调用对象类的方法

public class Test {
    public static void main(String[] args) {
        Employee e = null;
        e.equals(null);
    }
}

interface Employee {
}
Run Code Online (Sandbox Code Playgroud)

java inheritance interface

145
推荐指数
5
解决办法
3万
查看次数

继承与聚合

关于如何在面向对象的系统中最好地扩展,增强和重用代码,有两种思路:

  1. 继承:通过创建子类来扩展类的功能.覆盖子类中的超类成员以提供新功能.当超类想要一个特定的接口但是对它的实现不可知时,使方法抽象/虚拟以强制子类"填空".

  2. 聚合:通过获取其他类并将它们组合到一个新类中来创建新功能.为这个新类附加一个公共接口,以便与其他代码进行互操作.

每个的好处,成本和后果是什么?还有其他选择吗?

我看到这个辩论定期出现,但我认为它还没有被问到Stack Overflow(虽然有一些相关的讨论).谷歌的结果也令人惊讶地缺乏.

language-agnostic oop inheritance aggregation

143
推荐指数
6
解决办法
8万
查看次数

C#错误:Parent不包含带0参数的构造函数

我的代码是

public class Parent
{

    public Parent(int i)
    {
        Console.WriteLine("parent");
    }
}

public class Child : Parent
{
    public Child(int i)
    {
        Console.WriteLine("child");
    }

}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Parent不包含带0参数的构造函数.

我理解问题是Parent没有带0参数的构造函数.但我的问题是,为什么我们需要一个零参数的构造函数?没有它,为什么代码不工作?

c# inheritance constructor compiler-errors

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

扩展Kotlin中的数据类

数据类似乎是Java中旧式POJO的替代品.很可能这些类允许继承,但我看不到扩展数据类的方便方法.我需要的是这样的:

open data class Resource (var id: Long = 0, var location: String = "")
data class Book (var isbn: String) : Resource()
Run Code Online (Sandbox Code Playgroud)

由于component1()方法的冲突,上面的代码失败了.data仅在一个类中留下注释也不起作用.

也许还有另一个成语来扩展数据类?

UPD:我可能只注释子子类,但data注释只处理构造函数中声明的属性.也就是说,我必须声明所有父级的属性open并覆盖它们,这很难看:

open class Resource (open var id: Long = 0, open var location: String = "")
data class Book (
    override var id: Long = 0,
    override var location: String = "",
    var isbn: String
) : Resource()
Run Code Online (Sandbox Code Playgroud)

inheritance android abstract kotlin data-class

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

在运行时,查找扩展基类的Java应用程序中的所有类

我想做这样的事情:

List<Animal> animals = new ArrayList<Animal>();

for( Class c: list_of_all_classes_available_to_my_app() )
   if (c is Animal)
      animals.add( new c() );
Run Code Online (Sandbox Code Playgroud)

所以,我想查看我的应用程序的Universe中的所有类,当我找到一个来自Animal的类时,我想创建一个该类型的新对象并将其添加到列表中.这允许我添加功能而无需更新事物列表.我可以避免以下情况:

List<Animal> animals = new ArrayList<Animal>();
animals.add( new Dog() );
animals.add( new Cat() );
animals.add( new Donkey() );
...
Run Code Online (Sandbox Code Playgroud)

通过上面的方法,我可以简单地创建一个扩展Animal的新类,它将自动被拾取.

更新:2008年10月16日上午9:00太平洋标准时间:

这个问题引起了很多很好的回应 - 谢谢.从回答和我的研究中,我发现我真正想要做的就是在Java下不可能.有一些方法,比如ddimitrov的ServiceLoader机制可以工作 - 但它们对我想要的东西非常重,我相信我只是将问题从Java代码转移到外部配置文件.

另一种表达我想要的方式:我的Animal类中的静态函数查找并实例化从Animal继承的所有类 - 无需任何进一步的配置/编码.如果我必须配置,我也可以在Animal类中实例化它们.我理解,因为Java程序只是一个松散的.class文件联合体,就像它一样.

有趣的是,在C#中,这似乎相当微不足道.

java reflection inheritance

139
推荐指数
5
解决办法
14万
查看次数

C#:提升继承的事件

我有一个包含以下事件的基类:

public event EventHandler Loading;
public event EventHandler Finished;
Run Code Online (Sandbox Code Playgroud)

在继承自此基类的类中,我尝试引发事件:

this.Loading(this, new EventHandler()); // All we care about is which object is loading.
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

事件'BaseClass.Loading'只能出现在+ =或 - =(BaseClass')的左侧

我假设我不能像其他继承的成员一样访问这些事件?

c# events inheritance

139
推荐指数
3
解决办法
6万
查看次数