Tag: inheritance

使用子类中的super关键字访问超类私有字段

对于编码项目,我有一个包含嵌套类的类。 嵌套类在同一外部类中进行子类化。 目的是让外部类包含嵌套类的一些实例,它可以将其交给外部类的其他实例。 嵌套子类允许外部类修改内容,而其超类允许读取内容并调用某些方法。 因此,超类对象被传递给其他对象以链接链中的外部类对象。 我的问题涉及访问修饰符。 这是一个极简主义的代码示例: abstract class OuterClass { protected class NestedSuperClass { private T data; public NestedSuperClass (T t) { this.data = t; } public T getOutput() { return data; } } protected class NestedSubClass extends NestedSuperClass { public NestedSubClass (T t) { super(t); } protected void setOutput(T t) { super.data = […]

访问Java中的super()类的私有变量–JChart2D

我在Java中扩展了一个类,它有一个私有变量,我希望在变量之前得到它的值。 没有方法可以在超类中访问此变量。 我尝试过super().m_zoomArea (该变量位于ZoomableChart类中)。 调用mouseDragged方法时更新变量。 我已经覆盖了这个方法,并希望在更新之前获取变量的值。

在Java中将Child类设置为Non Serializable

我有一个实现Serializable的类。 现在我扩展了这个类,我希望这个扩展类不是Serializable。 那怎么办呢? 例如。 我有 class A implements Serializable. 我有 class B extends A. 但我希望B类是Non Serializable。

隐藏Javainheritance中的字段

在类中,与超类中的字段具有相同名称的字段会隐藏超类的字段。 public class Test { public static void main(String[] args) { Father father = new Son(); System.out.println(father.i); //why 1? System.out.println(father.getI()); //2 System.out.println(father.j); //why 10? System.out.println(father.getJ()); //why 10? System.out.println(); Son son = new Son(); System.out.println(son.i); //2 System.out.println(son.getI()); //2 System.out.println(son.j); //20 System.out.println(son.getJ()); //why 10? } } class Son extends Father { int i = 2; int j […]

理解Java中的inheritance概念

我只是刷新java的oopsfunction。 所以,我对inheritance概念有点困惑。 为此,我有以下示例代码: class Super{ int index = 5; public void printVal(){ System.out.println(“Super”); } } class Sub extends Super{ int index = 2; public void printVal(){ System.out.println(“Sub”); } } public class Runner { public static void main(String args[]){ Super sup = new Sub(); System.out.println(sup.index+”,”); sup.printVal(); } } 现在上面的代码给出了输出为: 5,Sub。 在这里,我们重写了printVal()方法,因此可以理解它只是访问子类方法。 但我无法理解为什么它从超级类访问x的值… 提前致谢….

在实例化对象时是否创建了超类的实例?

当我们在java中实例化一个特定的类时,是否会创建一个超类实例。 如果是这种情况那么实例化所有超类将会有很多开销。 我试过以下代码: public class AClass { public AClass() { System.out.println(“Constructor A”); } } public class BClass extends AClass{ public BClass(){ System.out.println(“Constructor B”); } } public class Test { public static void main(String[] args) { BClass b = new BClass(); } } 代码的输出是: Constructor A Constructor B 那么,这是否意味着当我们实例化一个类时,会创建超类对象的完整层次结构?

扩展java.lang.String

java.lang.String被声明为final,但有没有合法的机制或以其他方式扩展它并替换equals(String other)方法?

为什么我们不能在子类中分配较弱的权限

我有一个类,它有一个方法,默认情况下访问说明符是public。 现在,我想在子类中扩展此类,并且我想覆盖此方法以使访问说明符为“private”。 编译此代码时,我收到编译错误: “试图分配较弱的访问权限”。 有人可以向我解释在子类中分配较弱权限有什么问题吗? 以下是导致编译错误的代码: class Superclass { void foo() { System.out.println(“Superclass.foo”); } } class Subclass extends Superclass { private void foo() { System.out.println(“Subclass.foo”); } }

Java中的多重inheritance设计问题

你如何处理在java中只有单一inheritance? 这是我的具体问题: 我有三个(简化的)课程: public abstract class AbstractWord{ String kind; // eg noun, verb, etc public String getKind(){ return kind; } } public class Word extends AbstractWord{ public final String word; ctor… public void setKind(){ // based on the variable word calculate kind.. } } public class WordDescriptor extends AbstractWord{ ctor.. public void setKind(String kind){this.kind = […]

将派生类传递给需要覆盖期望基类的方法

我有一个类A,带有抽象方法doAction(BaseClass obj),期望一个类型为BaseClass的参数 public class A { //…. abstract void doAction(BaseClass obj); //…. } 现在,我有另一个需要扩展A的B类。但是,B的doAction方法需要使用扩展BaseClass的对象DerivedClass。 public class B extends class A { //.. void doAction(DerivedClass obj) { obj.callMethodAvailableOnlyInDerivedClass(); } } 我如何处理这种情况,我需要将类型为DerivedClass的param传递给期望BaseClass时要重写的方法? 谢谢!