草庐IT

Inheritance

全部标签

java - 在 Java 中访问 super() 类的私有(private)变量 - JChart2D

我在Java中扩展了一个类,它有一个私有(private)变量,我想在它被更改之前获取它的值。在父类(superclass)中没有访问此变量的方法。我试过super().m_zoomArea(变量在jChart2D的ZoomableChart类中)。当调用mouseDragged方法时,变量会更新。我已经重写了这个方法,想在更新之前获取变量的值。 最佳答案 您可以访问任何类的私有(private)变量,但这是一个坏主意,因为您违反了OOP的基本原则之一-封装。但有时程序员被迫打破它。这是解决您问题的代码:扩展类publicclass

java - 多个父类(super class)和代码重用

这个问题与Android有关,因为我的需求存在于该领域,但这个问题仍然适用于整个Java;我将在这里使用一些Android术语,例如Activity、FragmentActivity、ListActivity等...我需要实现一个抽象基类,其中包含必须在整个应用程序中使用的功能,更具体地说,每个Activity都必须使用此功能,但我希望它由基类自动处理.我的问题是我在应用程序中有许多不同类型的Activity,例如Activity、FragmentActivity和ListActivity,所有这些都扩展了Activity(当然要减去Activity)。由于基类中的代码对于Activi

Java:从静态方法中获取继承类的类

我在Java中遇到以下问题:我有一个基类和一个派生类,我在基类中有一个方法。当我通过Derived调用Base的foo方法时,我想获取Derived的类。如果可以那样做,foo方法可以是通用的。classBase{staticvoidfoo(){//IwanttogetDerivedclasshere//Derived.class}}classDerivedextendsBase{}Derived.foo();感谢您的帮助!大卫 最佳答案 这不是静态方法的工作方式。您必须实现Derived.foo(),执行Derived的任何特殊操

java - Java 中的异常和继承

假设我们有这个问题publicclassFather{publicvoidmethod1(){...}}publicclassChild1extendsFather{publicvoidmethod1()throwsException{super.method1();...}}Child1扩展了Father并覆盖了method1但给定的实现Child1.method1现在抛出异常。这不会编译,因为覆盖方法不能抛出新的异常。什么是最好的解决方案?将所需的异常传播给Father。对我来说,这违反封装、继承和一般OOP(Father可能会抛出一个永远不会发生的异常)。改用RuntimeExc

java - "has private access"泛型错误

我遇到了一个实际上可以自己解决的问题,但我仍然不明白为什么我的原始代码不起作用,或者是否有比我找到的解决方案更优雅的解决方案。我在这里展示了我的代码的简化版本。考虑以下抽象父类(superclass)X:publicabstractclassX{privateinti;publicvoidm1(Xx){x.i=1;m2(x);}publicabstractvoidm2(Xx);}当调用m1时,我们操作传递的实例的X的私有(private)字段,然后我们用该实例调用m2。我有几个X的子类,它们在某种意义上都是相似的,因为它们也声明了它们操纵的私有(private)成员。为了实现这一点,他

java - 从父类返回子类

我有一个构建器类,它从大多数方法返回自身以允许菊花链。为了使它与子类一起工作,我希望父方法返回子类的实例,以便子方法可以链接到最后。publicclassBaseBuilder>{publicTbuildSomething(){doSomeWork();/*OPTION#1:*/returnthis;//"Typemismatch:cannotconvertfromBaseBuildertoT"/*OPTION#2:*/returnT.this;//"Typemismatch:cannotconvertfromBaseBuildertoT"/*OPTION#3:*/return(T)t

java - 为什么在 Java 中继承是强耦合的,而组合是松散耦合的?

这个问题在这里已经有了答案:Prefercompositionoverinheritance?(35个答案)关闭9年前。我在设计模式中一次又一次地听到这种比继承更喜欢组合的说法。对此引用的一些原因是1)Inheritanceisstronglycoupledwhereascompositionislooselycoupled2)Inheritanceiscompiletimedeterminedwhereascompositionisrun-time3)Inheritancebreaksencapsulationwhereascompositiondoesnot4)anythingel

java - 强制子类在抽象 java 类中包含常量

我有一个抽象类,我希望所有子类都根据实现为其定义一个常量——它主要是关于类实现的元数据。在父类(superclass)中:protectedstaticfinalStringOBJECT_NAME;protectedstaticfinalStringOBJECT_DEF;然后在子类中:protectedstaticfinalStringOBJECT_NAME="awesomeclass";protectedstaticfinalStringOBJECT_DEF="anawesomeclassthatisalsogreat";有没有办法强制类的实现声明一个常量?

java - 使用 Java 8 在运行时选择具体实现

在选择要实例化的实现/子类时,我不清楚将if/switch放在哪里,特别是考虑到现在接口(interface)可以具有静态方法时。假设我有一个服务,一个由接口(interface)定义的类型和几个实现。我想最好不要把那个逻辑放在服务中,而是要有工厂方法。但是它应该按照thisanswer中的建议进入接口(interface)或另一个带有参数到类型映射的类中吗??将它放在界面中对我来说似乎很自然:publicinterfaceMyInterface{publicvoiddoSomething();publicstaticMyInterfacecreate(intparam){if(par

Java 向上转换与向下转换

我有以下代码classX{}classYextendsX{}classZextendsX{}publicclassRunTimeCastDemo{publicstaticvoidmain(Stringargs[]){Xx=newX();Yy=newY();Zz=newZ();Xx1=y;//compilesok(yissubclassofX),upcastXx2=z;//compilesok(zissubclassofX),upcast上面的代码是在一次讲座中给我的。我知道X是Y和Z的基类,x是对X类型对象的引用,y是对Y类型对象的引用,z是对Z类型对象的引用。令我困惑的部分是代码的最