Tag: inheritance

从父类ctor调用重写方法

我尝试从父类的构造函数中调用重写方法,并注意到跨语言的不同行为。 C++ – 回声A.foo() class A{ public: A(){foo();} virtual void foo(){cout<<"A.foo()";} }; class B : public A{ public: B(){} void foo(){cout<<"B.foo()";} }; int main(){ B *b = new B(); } Java – 回声B.foo() class A{ public A(){foo();} public void foo(){System.out.println(“A.foo()”);} } class B extends A{ public void foo(){System.out.println(“B.foo()”);} } class Demo{ public static void main(String […]

子类构造函数是否需要超类构造函数的所有参数?

我有两个class, Staff和AdvancedStaff ,它扩展了前者。 Staff有这个构造函数: public Staff (String number, String title, String name, String role, char level) { staffNumber = number; staffTitle = title; staffName = name; staffRole = role; payScaleLevel = level; } 我会注意到所有实例变量都已设置为私有。 虽然, Advanced Staff有这个构造函数: public AdvancedStaff (String number, String title, String name) { super(number, title, name); role = “Entry level Advanced Staff”; […]

使用inheritance和重写方法在Java中复杂输出

我偶然发现了这段代码。 我试着猜测在实际操作之前运行它的结果是什么。 当我看到它们并需要一些解释时,我真的很困惑。 这是代码: public class A { String bar = “A.bar”; A() { foo(); } public void foo() { System.out.println(“A.foo(): bar = ” + bar); } } public class B extends A { String bar = “B.bar”; B() { foo(); } public void foo() { System.out.println(“B.foo(): bar = ” + bar); } } public […]

GetDeclaredMethods(java)中的问题

我的代码中有一个小问题 我有2节课 public class A { public A foo(int a) {return new A();} } public class B extends A{ public B foo(int x){ return new B();} } 现在在我的代码中我想只打印在B类中声明的方法 通过这种方式 B b = new B(); Method[] m = b.getClass().getDeclaredMethods(); for (int i = 0; i < m.length; i++) { System.out.print(m[i].getName()); } 为什么输出 foo foo 为什么GetDeclaredMethods在A类中也找到了foo? 我该怎么办呢? […]

如何使用自己类型的成员扩展类?

假设我们需要使用一个名为“BaseNode”的类来实现不同类型的树,从中派生出其他类型的节点,并且它假设有一个名为其自身类型的parent实例变量,通常它看起来像: class BaseNode{ //…some fields BaseNode parent; //…other methods } 现在,如果我要为更多成员的AVL树派生Node: class AVLNode extends BaseNode{ //…other useful stuff } 原始parent (& left和right )节点成员仍将是BaseNode类型,这阻止我实现AVL树。 谁能告诉我如何解决这个inheritance问题? 谢谢!

Javainheritance错误:隐式超级构造函数未定义

我是Java的新手,只是学习OOP概念。 请查看我的代码。 我收到以下错误.- 隐式超级构造函数未定义。 class BoxSuper { int height; int length; int width; BoxSuper(BoxSuper obj) { height=obj.height; length=obj.length; width=obj.width; } BoxSuper(int a,int b,int c) { height=a; length=b; width=c; } BoxSuper(int val) { height=length=width=val; } int volume() { return height*length*width; } } class BoxSub extends BoxSuper { int weight; BoxSub(int a,int b,int c,int d) { height=a; […]

jackson序列化:如何忽略超类属性

我想序列化一个不受我控制的POJO类,但是想要避免序列化来自超类的任何属性,而不是序列化来自最终类的属性。 例: public class MyGeneratedRecord extends org.jooq.impl.UpdatableRecordImpl, example.generated.tables.interfaces.IMyGenerated { public void setField1(…); public Integer getField1(); public void setField2(…); public Integer getField2(); … } 您可以从示例中猜测此类是由JOOQ生成的,并且inheritance自复杂的基类UpdatableRecordImpl,它还具有一些类似于bean属性的方法,这会在序列化期间导致问题。 此外,我有几个类似的类,因此最好避免为我生成的所有POJO重复相同的解决方案。 到目前为止,我找到了以下可能的解决方案: 使用mixin技术忽略来自超类的特定字段,如下所示: 如何告诉jackson忽略我无法控制源代码的属性? 这个问题是如果基类发生变化(例如,新的getAnything()方法出现在它中),它可能会破坏我的实现。 实现自定义序列化程序并在那里处理问题。 这对我来说似乎有点矫枉过正。 顺便说一下,我有一个接口,它描述了我想要序列化的属性,也许我可以混合一个@JsonSerialize(as = IMyGenerated.class)注释……? 我可以将此用于我的目的吗? 但是,从纯粹的设计角度来看,最好的方法是能够告诉jackson我只想序列化最终类的属性,并忽略所有inheritance的属性。 有没有办法做到这一点? 提前致谢。

Java中的inheritance如何工作?

我们有下一课: class Super { void foo() { System.out.println(“Super”); } } class Sub extends Super { void foo() { super.foo(); System.out.println(“Sub”); } } public class Clazz { public static void main(String[] args) { new Sub().foo(); } } 输出是: 超 子 问题: super礼物是什么? 它是父类的对象,哪个孩子保持为字段? 如果是,抽象类的inheritance如何工作? 您无法创建抽象类的实例。 如果不是,那么被覆盖的方法在哪里举行? 我试过谷歌,但我找到的只是关于如何inheritance类等的常见信息。 更新: 你还在告诉我显而易见的事情。 也许我的问题有点误导,但我会试着改写它: 当我们用super调用方法时,你说,我们正在访问父方法。 但是如何在没有父对象的情况下调用此方法呢? 这个super一样吗? 如您所知, this是对具体对象的引用。

我们应该总是超越平等吗?

在编写自己的类时,是否总是需要重写equals(Object o) ? 如果我不这样做,它会自动检查所有字段是否相同? 或者只是检查两个变量是否指向同一个对象?

Java中的inheritance真的发生了什么?

假设我有两个类Parent和Child ,而Childinheritance自Parent 。 我在Parent有三种方法,其中两种是公共的,一种是私有的。 通常我们说所有非私有方法都被inheritance到Child类中,但我对确切发生的事情感到困惑。 Java是否在Child类中复制了这些方法,还是使用某种引用来维护关系? class Parent{ // Private method private void method1(){ System.out.println(“In private method of Parent class”); } void method2(){ // calling private method method1(); } void method3(){ // calling private method method1(); } } class Child extends Parent{ } class MainClass{ public static void main(String[] args){ Child child = new Child(); […]