相关疑难解决方法(0)

喜欢构成而不是继承?

为什么喜欢构图而不是继承呢?每种方法都有哪些权衡取舍?什么时候应该选择继承而不是作文?

language-agnostic oop inheritance composition aggregation

1538
推荐指数
23
解决办法
29万
查看次数

Liskov替代原则的例子是什么?

我听说Liskov替换原则(LSP)是面向对象设计的基本原则.它是什么以及它的使用例子是什么?

oop liskov-substitution-principle definition design-principles solid-principles

845
推荐指数
24
解决办法
29万
查看次数

java.io中使用最多的模式是什么?

最近我在求职面试时被问到这个问题,我无法回答.那么,java.io中最常用的模式是什么?它是如何使用的?常见的Java库中使用的其他模式有哪些?

java io design-patterns

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

你如何设计一个继承类?

我听说它说"设计继承"是"困难的",但我从来没有发现过这种情况.任何人(以及任何人,我的意思是Jon Skeet)都可以解释为什么这可能是困难的,陷阱/障碍/问题是什么,为什么凡人的程序员不应该尝试它,只是让他们的课程密封以保护无辜者?

好吧,我嘲笑后者 - 但我很想知道是否有人(包括Jon)真的遇到"继承设计"的困难.我真的从来没有把它视为一个问题,但也许我忽略了一些我认为理所当然的东西 - 或者在没有意识到的情况下搞砸了什么!

编辑:感谢到目前为止所有优秀的答案.我相信共识是​​,对于典型的应用程序类(WinForm子类,一次性实用程序类等),不需要考虑任何类型的重用,更不用说通过继承重用了,而对于库类,考虑重用是至关重要的.通过设计中的继承.

我并没有真的想到一个WinForm类来实现一个GUI对话框,作为一个有人可能会重用的类 - 我有点认为它是一个一次性的对象.但从技术上讲,它是一个类,有人可能会继承它 - 但它不太可能.

很多大规模的发展,我所做的一直是基础库和框架类库,因此设计为通过继承的重用是至关重要的-我只是从来没有认为这是"难",它只是.;-)

但我也从未考虑过与WinForms等常见应用任务的"一次性"类别相比.

当然,欢迎设计继承的更多提示和陷阱; 我也试着投入一些.

language-agnostic inheritance

12
推荐指数
2
解决办法
2099
查看次数

创建涉及虚拟继承的类的过程

在许多描述虚拟基类(通常用于解决钻石问题)的教程中,它们通常都有类似于此结构设计的代码:

class Animal
{
public:
    Animal()
    {
        cout << "Creating Animal\n";
    }
};

///////////////////////////

class FourLegs : virtual public Animal
{
public:
    FourLegs()
    {
        cout << "Creating FourLegs\n";
    }
};

///////////////////////////

class Mammal : virtual public Animal
{
public:
    Mammal()
    {
        cout << "Creating Mammal\n";
    }
};

///////////////////////////

class Fox : public FourLegs, public Mammal
{
public:
    Fox()
    {
        cout << "Creating Fox\n";
    }
};
Run Code Online (Sandbox Code Playgroud)

当我创建Fox的实例时,我得到了预期的输出,只创建了一个Animal:

Creating Animal
Creating FourLegs
Creating Mammal
Creating Fox
Run Code Online (Sandbox Code Playgroud)

如您所见,我有两个二级类继承虚拟.现在,如果只有一个二级类被虚拟继承,而另一个只是公开继承,那么就会出现有趣的输出.例如,如果FourLegs是继承的公共和Mammal继承虚拟公共,这是输出:

Creating Animal
Creating …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance diamond-problem

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

python模块导入中的继承vs类实例

抱歉,如果这没有意义,我不是一个经验丰富的程序员.

请考虑以下代码:

import mymodule

class MyClass:
    def __init__(self):
        self.classInstance = myModule.classInstance()
Run Code Online (Sandbox Code Playgroud)

然后 ......

from mymodule import classInstance

class MyClass(classInstance):
    def __init__(self):
        pass
Run Code Online (Sandbox Code Playgroud)

如果我只是想在MyClass中使用一个classInstance,是否可以从模块中导入特定的类并让MyClass继承这个类?

在决定这两种方法时,是否有任何最佳实践或我应该考虑的事项?

非常感谢

python oop inheritance module

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