Questions tagged «inheritance»

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

2
接口和类的'instanceof'运算符的行为不同
我想知道有关instanceofJava 中运算符的以下行为。 interface C {} class B {} public class A { public static void main(String args[]) { B obj = new B(); System.out.println(obj instanceof A); //Gives compiler error System.out.println(obj instanceof C); //Gives false as output } } 为什么会这样呢?interface C和之间没有关系class B,但是它给出false,而如果obj instanceof A给出编译器错误?

4
Scala案例类继承
我有一个基于Squeryl的应用程序。我将模型定义为案例类,主要是因为我发现使用复制方法很方便。 我有两个严格相关的模型。字段是相同的,许多操作是相同的,它们将存储在同一数据库表中。但是,有些行为仅在两种情况之一中才有意义,或者在两种情况下都有意义但有所不同。 到现在为止,我只使用了单个case类,带有用于区分模型类型的标志,并且所有基于模型类型不同的方法都以if开头。这很烦人,而且类型安全性不高。 我想做的是考虑祖先案例类中的常见行为和字段,并从中继承两个实际模型。但是,据我所知,从案例类继承在Scala中是不可思议的,并且如果子类本身是案例类(不是我的案例),甚至是禁止的。 从案例类继承时应该注意哪些问题和陷阱?就我而言,这样做有意义吗?

16
覆盖vs隐藏Java-困惑
我对重写与隐藏在Java中有何不同感到困惑。谁能提供更多有关这些差异的详细信息?我阅读了Java教程,但是示例代码仍然让我感到困惑。 更清楚地说,我理解压倒一切。我的问题是,除了一个隐藏在实例级别而另一个隐藏在类级别之外,我看不到隐藏有什么不同。 查看Java教程代码: public class Animal { public static void testClassMethod() { System.out.println("Class" + " method in Animal."); } public void testInstanceMethod() { System.out.println("Instance " + " method in Animal."); } } 然后我们有一个子类Cat: public class Cat extends Animal { public static void testClassMethod() { System.out.println("The class method" + " in …

1
存在从派生*到基本*的转换,但无法访问
为什么即使c是一个结构并且默认情况下具有公共继承,以下代码也会产生此错误? struct c { protected: int i; public: c(int ii=0):i(ii){} virtual c *fun(); }; c* c::fun(){ cout<<"in c"; return &c(); } class d : c { public: d(){} d* fun() { i = 9; cout<<"in d"<<'\t'<<i; return &d(); } }; int main() { c *cc; d dd; cc = ⅆ …
88 c++  inheritance 

7
如果派生类中的基类属性被覆盖,该如何调用基类的属性?
我正在将我的某些类从对getter和setter的广泛使用改为对属性的更pythonic的使用。 但是现在我陷入了困境,因为以前的一些getter或setter方法会调用基类的相应方法,然后执行其他操作。但是,如何通过属性来实现呢?如何在父类中调用属性getter或setter? 当然,仅调用属性本身即可进行无限递归。 class Foo(object): @property def bar(self): return 5 @bar.setter def bar(self, a): print a class FooBar(Foo): @property def bar(self): # return the same value # as in the base class return self.bar # --> recursion! @bar.setter def bar(self, c): # perform the same action # as in the …

6
如何使用继承对RESTful API建模?
我有一个对象层次结构,我需要通过RESTful API公开它,我不确定URL的结构以及返回的内容。我找不到任何最佳做法。 假设我有从动物那里继承来的狗和猫。我需要对猫狗进行CRUD操作;我还希望能够对动物进行一般的手术。 我的第一个想法是做这样的事情: GET /animals # get all animals POST /animals # create a dog or cat GET /animals/123 # get animal 123 问题是/ animals集合现在“不一致”,因为它可以返回并获取结构不完全相同的对象(狗和猫)。集合返回具有不同属性的对象是否被视为“ RESTful”? 另一个解决方案是为每种具体类型创建一个URL,如下所示: GET /dogs # get all dogs POST /dogs # create a dog GET /dogs/123 # get dog 123 GET /cats # get …

6
继承与递归
假设我们有以下类: class A { void recursive(int i) { System.out.println("A.recursive(" + i + ")"); if (i > 0) { recursive(i - 1); } } } class B extends A { void recursive(int i) { System.out.println("B.recursive(" + i + ")"); super.recursive(i + 1); } } 现在让我们打电话给recursiveA类: public class Demo { public static …

7
XML序列化和继承的类型
在上一个问题之后,我一直在努力使我的对象模型序列化为XML。但是我现在遇到了一个问题(奇怪的是!)。 我的问题是我有一个抽象基本类类型的集合,该集合由具体的派生类型填充。 我认为只将XML属性添加到所有涉及的类中就可以了,而且一切都会变得很顺利。可悲的是,事实并非如此! 因此,我对Google进行了一些研究,现在我了解了为什么它不起作用。在该XmlSerializer实际上是在做一些聪明的反射,以对象序列化到/从XML,并且因为它的基础上,抽象类型,它不能弄清楚到底是怎么回事了它的交谈。精细。 我确实在CodeProject上遇到过此页面,它看起来可能很有帮助(但仍可以完全阅读/使用),但是我想我也想将此问题带到StackOverflow表中,以查看是否有任何整洁的地方骇客/技巧,以便以最快/最轻便的方式启动并运行它。 有一件事我还要补充的是,我不要想往下走XmlInclude的路线。耦合太简单了,系统的这个区域正在大量开发中,因此这将是真正的维护难题!

11
Python继承的意义是什么?
假设您有以下情况 #include <iostream> class Animal { public: virtual void speak() = 0; }; class Dog : public Animal { void speak() { std::cout << "woff!" <<std::endl; } }; class Cat : public Animal { void speak() { std::cout << "meow!" <<std::endl; } }; void makeSpeak(Animal &a) { a.speak(); } int …

7
静态方法继承的正确替代方法是什么?
我了解C#不支持静态方法继承。我还阅读了许多讨论(包括此处的讨论),在这些讨论中,开发人员声称需要此功能,典型的回答是“如果需要静态成员继承,则设计中会有缺陷”。 好吧,鉴于OOP甚至不想让我考虑静态继承,因此我必须得出结论,我对它的明显需求指向了我的设计中的错误。但是,我被困住了。我非常感谢您为解决此问题提供的帮助。这是挑战... 我想创建一个封装了一些复杂的初始化代码的抽象基类(我们称它为Fruit)。该代码不能放在构造函数中,因为其中一些将依赖于虚拟方法调用。 Fruit将被其他具体类(Apple,Orange)继承,每个具体类都必须公开一个标准工厂方法CreateInstance()来创建和初始化实例。 如果静态成员继承是可行的,我将把工厂方法放在基类中,并使用对派生类的虚拟方法调用来获取必须从中初始化具体实例的类型。客户端代码将简单地调用Apple.CreateInstance()以获得完全初始化的Apple实例。 但是显然这是不可能的,所以有人可以解释一下我的设计需要如何更改以适应相同的功能。
83 c#  .net  inheritance  static 

3
Javascript继承:调用超级构造函数还是使用原型链?
最近,我读到有关MDC中JavaScript调用用法的信息 https://developer.mozilla.org/zh-CN/JavaScript/Reference/Global_Objects/Function/call 下面显示的示例的一个链接,我还是不明白。 他们为什么在这里使用继承 Prod_dept.prototype = new Product(); 这有必要吗?因为在这里有对超级构造函数的调用 Prod_dept() 反正像这样 Product.call 这只是常见的行为吗?什么时候使用调用超级构造函数或使用原型链更好? function Product(name, value){ this.name = name; if(value >= 1000) this.value = 999; else this.value = value; } function Prod_dept(name, value, dept){ this.dept = dept; Product.call(this, name, value); } Prod_dept.prototype = new Product(); // since 5 is less …

6
继承:'A'是'B'不可访问的基础
$ cat inheritance.cpp #include <iostream> using namespace std; class A { }; class B : private A { }; int main() { A* ab = new B; } $ $ g++ inheritance.cpp inheritance.cpp: In function 'int main()': inheritance.cpp:9: error: 'A' is an inaccessible base of 'B' $ 我只是不明白这个错误。 据我所知,正如本教程所确认的,private继承仅应更改class B外部成员对成员的可见方式。 …
82 c++  inheritance 

7
什么是Class对象(java.lang.Class)?
的Java文档Class说: ClassJava虚拟机在装入类时以及通过defineClass对类装入器中的方法的调用自动构造对象。 这些Class对象是什么?它们是否与通过调用从类实例化的对象相同new? 另外,例如,即使我不继承,也object.getClass().getName()如何将所有内容都转换为超类?Classjava.lang.Class


11
什么时候使用super()?
我目前正在Java课程中学习有关类继承的信息,但我不知道何时使用该super()调用? 编辑: 我发现使用此代码示例:super.variable class A { int k = 10; } class Test extends A { public void m() { System.out.println(super.k); } } 因此,我知道在这里,您必须使用它super来访问k超类中的变量。但是,在其他情况下,该怎么super();办?在其自己的?

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.