Tag: inheritance

如何计算显式创建的inheritance树中特定类的实例数?

class A { static int i; { System.out.println(“A init block”+ ++i); } } class B extends A { static int j; { System.out.println(“B init block”+ ++j); } } class C extends B { static int k; { System.out.println(“C init block”+ ++k); } public static void main(String abc[]) { C c =new C(); } } 在上面的代码中,我们可以轻松计算为每个类创建的对象数。 […]

更改子类java中的类变量类型

我有一个名为“模块”的课程 public abstract class Module { protected Map ports; … public Map getPorts() { return ports; } } 以及一个名为Design的类,它是Module的子类 public class Design extends Module{ … //want to do this but doesn’t compile @override public Map getPorts() { return (Map) ports; //TopPort is a subclass of Port } } 基本上我想要做的只是将TopPorts添加到Design中,并且在从getPorts()函数返回时已经转换了类型。 我现在正在做的是在getPorts函数返回main之后将Ports转换为TopPorts,但这非常有问题,并且正在构建我的代码的人无法立即了解何时返回TopPort。 我也试过创建另一个函数而不是重写getPorts() //want to do this […]

天真的inheritance问题 – Java

G’day人, 问这样一个天真的问题让我感到尴尬。 但我无法理解一件事,我有这样的inheritance结构, B扩展A,我写的代码如下, A级 public class A{ private int pos = 0; public A(){ this.pos = 12; } public int getPos(){ return this.pos; } } B级 public class B extends A{ int spec = 15; public B(){ super(); } public int getSpec(){ return this.spec; } } 我还有一个课程要测试,这会让我们回答我的问题。 class级考试 import java.util.*; public class Test{ public […]

将嵌套类inheritance到子类中

当我阅读这篇文章时,在超类的私人成员部分,我看到了这一行 嵌套类可以访问其封闭类的所有私有成员 – 包括字段和方法。 因此,子类inheritance的公共或受保护嵌套类可以间接访问超类的所有私有成员。 我的问题是我们如何直接访问Derived的Nested类Base (就像我们可以访问任何public protected字段一样)? 和 如果有办法, Derived如何通过Nested访问哪个是Base私有字段? public class Base { protected int f; private int p; public class Nested { public int getP() { return p; } } } class Derived extends Base { public void newMethod() { System.out.println(f); // i understand inheriting protected field // how to access the […]

所有类如何从Objectinheritance?

所有类都inheritance自java.lang.Object ,尽管extends Object (通常)不会在任何地方写出。 这怎么可能?

使用Java进行转换(接口和类)

如果: interface I{} class A implements I{} class B extends A{} class C extends B{} A a = new A(); B b = new B(); Why a = (B)(I)b; is correct but b = (B)(I)a; is false? 我发现施法很混乱,如果我可以向下施放或向上施放物体,最好的方法是什么?

是否可以使用默认方法实现在基类中实现抽象方法

如果我有一个抽象方法的类: abstract class Base { abstract void foo(); } 和一个使用默认实现声明相同方法的接口: interface Inter { default void foo() { System.out.println(“foo!”); } } 我是否需要在实现/扩展两者的类中提供实现? class Derived extends Base implements Inter { } 看起来这应该可行,但我得到一个编译错误, Derived不是抽象的,并且不会覆盖抽象方法foo 。 我猜这个类中的抽象方法比接口的默认方法“更重要”。 有没有一个很好的方法来使这项工作? 我的根本问题是我有一个三级抽象类层次结构( A和B扩展C , D和E扩展F , C和F扩展G ),它将具有叶类的多个实现。 在每组实现中,有一些常用的方法在基类中定义,所以我希望写一下 abstract class C extends G { abstract void foo(); abstract void bar(); abstract […]

使用私有构造函数扩展类的技术

与大多数Singleton类一样,是否存在使用私有构造函数“扩展”类的标准技术? 具体来说,我正在尝试扩展java.lang.management.ThreadInfo类,因为我将很多它们添加到HashSet来控制唯一性。 但是,我确定两个线程是否相等的方式是不同的,并且与equals()方法的默认实现不同。 在这种情况下,扩展类显然不是一个选项。 制作类似于在构造函数中接受ThreadInfo的包装类,然后使用值手动填充所有相关字段,然后覆盖equals()和hashCode() ,或者有更好的方法来执行此操作是否合理? 像我这样的东西就是我开始写的,但更好的实现是理想的: class ThreadInfoWrapper { private ThreadInfo info; ThreadInfoWrapper(ThreadInfo info) { this.info = info; } //Populate instance variables with Thread.State, thread ID, etc.. with //Getters/setters and all that other stuff public boolean equals(Object o) { //Unique implementation } public int hashCode() { //Whatever implementation } } 但这感觉就像是一种非常迂回的方式来实现一些基本function。 我调查了一下,Java标准库中不存在使用自定义比较器的集合的实现。 我想我可以编写自己的哈希集实现,但这对于一个简单的情况来说太过分了。 任何见解都会有所帮助。

类不扩展java.lang.Object

在Java中创建用户定义的类时,不要将其指定为扩展Object。 但是这个类仍然是一个对象。 这是如何运作的? javac或JVM如何将类的所有属性注入用户定义的类?

为什么变量在覆盖时的行为与方法不同?

通常,Overriding是在子类中重新定义成员含义的概念。为什么变量在重写java时不像方法一样? 例如: class Base { int a = 10; void display() { System.out.println(“Inside Base :”); } } class Derived extends Base { int a = 99; @Override // method overriding void display() { System.out.println(“Inside Derived :”); } } public class NewClass { public static void main(String… a) { Derived d = new Derived(); Base b […]