Questions tagged «inheritance»

继承是面向对象编程中的系统,该系统允许对象支持由先前类型定义的操作,而不必提供自己的定义。它是面向对象编程中多态性的主要载体。

13
JavaScript继承[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 我正在尝试在javascript中实现继承。我想出了最少的代码来支持它。 function Base(){ this.call = function(handler, args){ handler.call(this, args); } } Base.extend = function(child, parent){ parent.apply(child); child.base = new parent; child.base.child = child; } 专家,请让我知道这是否足够或我可能错过的任何其他重要问题。基于面临的类似问题,请提出其他建议。 这是完整的测试脚本: function Base(){ this.call = function(handler, args){ handler.call(this, args); } this.superalert = function(){ alert('tst'); } } Base.extend = function(child, parent){ parent.apply(child); …

15
C#:覆盖返回类型
有没有办法在C#中覆盖返回类型?如果是这样,怎么做,如果不是,为什么,推荐的做事方式是什么? 我的情况是我有一个带有抽象基类及其后代的接口。我想这样做(虽然不行,但是举个例子!): public interface Animal { Poo Excrement { get; } } public class AnimalBase { public virtual Poo Excrement { get { return new Poo(); } } } public class Dog { // No override, just return normal poo like normal animal } public class Cat { public override …

10
为什么我们在Java中将父引用分配给子对象?
我在问一个很简单的问题,但是对此我有些困惑。 假设我有一堂课Parent: public class Parent { int name; } 并开设另一堂课Child: public class Child extends Parent{ int salary; } 最后是我的Main.java类 public class Main { public static void main(String[] args) { Parent parent = new Child(); parent.name= "abcd"; } } 如果我做一个子对象 Child child = new Child(): 然后child对象可以访问两个name and salary变量。 我的问题是: Parent parent …

1
为什么在虚拟继承中调用Default构造函数?
我不明白为什么在下面的代码中,当我实例化一个类型为object的对象时daughter,grandmother()会调用默认构造函数? 我认为grandmother(int)应该调用构造函数(以遵循我的mother类构造函数的规范),或者由于虚拟继承而根本不应该编译此代码。 在这里,编译器grandmother在我的背后默默地调用默认构造函数,而我从未要求过它。 #include <iostream> class grandmother { public: grandmother() { std::cout << "grandmother (default)" << std::endl; } grandmother(int attr) { std::cout << "grandmother: " << attr << std::endl; } }; class mother: virtual public grandmother { public: mother(int attr) : grandmother(attr) { std::cout << "mother: " << attr << …


7
设计C#类库时,何时应选择通过接口继承?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 我有一个数字Processor类,可以做两种非常不同的事情,但是是从通用代码中调用的(“控制反转”情况)。 我想知道在决定它们是否都应该继承自BaseProcessor或实现IProcessor为接口时,我应该了解哪些设计考虑因素(或者对您来说是对用户有用的认识)。

5
虚拟析构函数是否被继承?
如果我有一个带有虚拟析构函数的基类。是否也有派生类声明虚拟析构函数? class base { public: virtual ~base () {} }; class derived : base { public: virtual ~derived () {} // 1) ~derived () {} // 2) }; 具体问题: 1)和2)是否相同?2)是因为其基础而自动虚拟还是“停止”了虚拟性? 如果无关的派生析构函数可以省略吗? 声明派生的析构函数的最佳实践是什么?声明它是虚拟的,非虚拟的还是尽可能省略它?

10
JavaScript扩展类
我有一个基类: function Monster() { this.health = 100; } Monster.prototype.growl = function() { console.log("Grr!"); } 我想扩展并创建另一个类: function Monkey extends Monster() { this.bananaCount = 5; } Monkey.prototype.eatBanana { this.bananaCount--; this.health++; //Accessing variable from parent class monster this.growl(); //Accessing function from parent class monster } 我已经做了大量的研究,并且似乎有许多复杂的解决方案可以在JavaScript中进行。在JS中完成此工作的最简单,最可靠的方法是什么?

9
通用<的真实示例是什么?超级T>?
我知道这&lt;? super T&gt;代表任何级别的T父类T(任何级别的父类)。但是我真的很难想象这个通用绑定通配符的任何现实示例。 我了解这&lt;? super T&gt;是什么意思,并且已经看到了此方法: public class Collections { public static &lt;T&gt; void copy(List&lt;? super T&gt; dest, List&lt;? extends T&gt; src) { for (int i = 0; i &lt; src.size(); i++) dest.set(i, src.get(i)); } } 我正在寻找可以使用此构造的现实生活用例的示例,而不是对其含义的解释。


6
如何在运行时动态更改实例的基类?
本文的摘要显示了__bases__通过将类添加到继承它的类的现有类集合中来动态更改某些Python代码的继承层次结构的用法。好的,这很难看懂,代码可能更清晰: class Friendly: def hello(self): print 'Hello' class Person: pass p = Person() Person.__bases__ = (Friendly,) p.hello() # prints "Hello" 也就是说,Person它不是从Friendly源级别继承的,而是通过修改__bases__Person类的属性在运行时动态添加此继承关系。但是,如果更改Friendly并Person成为新的样式类(通过从object继承),则会出现以下错误: TypeError: __bases__ assignment: 'Friendly' deallocator differs from 'object' 对此进行一些谷歌搜索似乎表明新样式类和旧样式类在运行时更改继承层次结构方面存在一些不兼容性。具体来说:“新型类对象不支持对其基属性的赋值”。 我的问题是,是否可以使用Python 2.7+中的新型类,使上面的Friendly / Person示例工作,可能是通过使用__mro__属性? 免责声明:我完全意识到这是晦涩的代码。我完全意识到,在实际的生产代码中,这样的技巧往往难以理解,这纯粹是一个思想实验,并且让人们从中学习有关Python如何处理与多重继承相关的问题的知识。


6
Python中私有和受保护方法的继承
我知道,Python中没有“真正的”私有/受保护的方法。这种方法并不意味着要隐藏任何东西。我只想了解Python的功能。 class Parent(object): def _protected(self): pass def __private(self): pass class Child(Parent): def foo(self): self._protected() # This works def bar(self): self.__private() # This doesn't work, I get a AttributeError: # 'Child' object has no attribute '_Child__private' 那么,这种行为是否意味着“受保护”的方法将被继承,但“私有”的方法将不会被继承呢? 还是我错过了什么?

1
MOQ-如何模拟需要转换为另一个接口的接口?
我想做的是为I1构造一个最小起订量-很好...但是,在我测试的使用此模拟程序的方法的过程中,我需要将其强制转换为I2才能访问某些未启用的属性I1 Interface I1 { int AProperty{get;set;}} Interface I2 {int AnotherProperty{get;set;}} 然后我有一些东西 Class O1 : I1 {} 和 Class O2 : O1 , I2 {} 问题是,当我拥有I2实现对象的实例时,可以将其强制转换为I1以便访问通过该接口实现的方法。在代码中这不是问题,一切都能按预期进行。 唯一的问题是在该类上编写单元测试时。 这些接口还公开了一个名为GetNewInstance的方法,该方法返回转换为IGetNewInstance接口的实现对象的初始化实例……我通常可以对此进行模拟并使其自身返回(因此我继续使用模拟对象)。 但是,当您尝试将此类型为I2的返回对象转换为I1时,将返回空引用-这很有意义,因为实现I2的模拟对象不会继承任何继承I1的对象。 问题是如何强制模拟对象同时从两个I1和Id继承?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.