草庐IT

Inheritance

全部标签

java - 抽象类或接口(interface)中的 public static final 字段

我有很多抽象类的子类,每个子类都声明了一个同名的publicstaticfinal字段。我在考虑在抽象父类(superclass)中有这个字段而不初始化它,并希望每个子类都被强制初始化它。我之所以想到这一点,是因为我的抽象类的所有子类都声明了一个名为UNIQUE_ID的公共(public)静态最终字符串字段,并且每个子类都必须声明一个具有完全相同名称的字段。我希望我的问题足够清楚,如果不是请告诉我。可以做一些或多或少等同于此的事情吗?编辑:添加代码:我的抽象类如下所示:publicabstractclassExperimentPanelModelextendsPanelizable{p

java - 使用 Eclipse 生成组合代码

EffectiveJava,以及其他来源建议我们应该考虑使用compositionoverinheritance.我经常发现自己通过使用Decoratorpattern来实现这样的构图。并实现将调用委托(delegate)给包装对象的转发方法。但是,我经常发现自己编写了很多简单的转发方法,类型如下:publicvoidmyMethod(Stringname){instance.myMethod(name);}Eclipse(3.4.x)中是否有自动生成这些转发方法的方法? 最佳答案 在源菜单中选择“生成委托(delegate)方法”

java - 有什么方法可以强制类在 Java 中具有 public static final 字段?

有没有办法强制Java中的类具有publicstaticfinal字段(通过接口(interface)或抽象类)?或者至少只是一个公共(public)领域?我需要以某种方式确保一组类有publicstaticfinalStringTYPE="...";在其中。 最佳答案 不,你不能。你只能强制他们有一个非静态的getter方法,它会为每个子类返回适当的值:publicabstractStringgetType();如果你需要将某物的每个子类映射到一个值,而不需要实例化它,你可以创建一个publicstaticMap,String>t

java - 在子类中重新定义静态方法

我想知道为什么这首先在Java中被允许(或者通常是oops)我记得静态方法对于父类和子类都是通用的publicclassRedefineextendsParent{publicstaticvoidtest(){}}classParent{publicstaticvoidtest(){}}Q1:既然静态方法不支持重写,那么两个类如何包含相同的方法?Q2:如果将静态方法更改为抛出未定义的异常,则无法编译。为什么会这样。它显然不是压倒一切的,所以我应该被允许抛出新的异常,对吧?publicclassRedefineextendsParent{publicstaticvoidtest()thr

java - 从类定义中删除 final 会破坏向后兼容性吗?

我目前正在阅读JoshuaBloch的《EffectiveJava》,第17条是“为继承设计和记录,否则禁止继承”。作者建议默认禁止继承。在默认情况下将类声明为final是否安全,如果需要扩展类,在以后的版本中删除final关键字是否安全?它会破坏对使用先前版本编译的代码的向后兼容性吗?如果是这样,似乎更安全的做法是将所有类设为最终类,并且仅在有良好支持需求的情况下在未来的版本中将其删除。 最佳答案 它既不破坏二进制也不破坏源兼容性。这就是将类(class)设置为final是个好主意的原因之一;改变主意总是可以的。TheJavaLa

java - 在此代码中如何选择一种方法而不是另一种方法?

这是另一个SCJP问题。下面的代码打印出Alpha:fooBeta:fooBeta:barBeta:bar,我不明白为什么第一个foo调用选择了Alpha的foo而不是Beta的。如果将Alpha.foo参数更改为String而不是String...,则输出为Beta:fooBeta:fooBeta:barBeta:bar,这是有道理的。我的理解是,当您说Alphaa=newBeta();时,编译器会检查Alpha.foo,但JVM实际上会运行Beta.foo。一方面,Beta确实有一个foo方法,其签名与调用相匹配。另一方面,我认为可变参数方法仅在没有其他方法与调用匹配时才运行。所以

java - Java 中可以扩展(继承)非抽象类吗?

类前面需要加abstract关键字吗?或者它是否需要有未实现的(抽象的)方法?任何普通类都可以扩展吗? 最佳答案 是的,所有非final的方法(static与其他方法也有点不同)都可以被覆盖,除非类本身被声明为final。仅当您不在基类中提供任何实现时才使用抽象方法。 关于java-Java中可以扩展(继承)非抽象类吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/958505

java - Java中 protected 类结构?

我想知道Java中是否有一种语言特性,其中父类(superclass)的方法对于子类的成员是不可见的:publicclassSubclassextendsprotectedSuperclass什么的。我举个例子。这是你的父类(superclass)。publicclassA{publicStringgetA(){...}publicStringgetB(){...}publicStringgetC(){...}publicvoidsetA(Stringa){...}publicvoidsetB(Stringb){...}publicvoidsetC(Stringc){...}}如果您想

java - Autowiring Spring 父类(super class)

为什么Spring在Autowiring期间自动选择父类(superclass)类型?例如,如果我有@ComponentpublicclassFoo{}@ComponentpublicclassBarextendsFoo{}有人Autowiring@AutowiredprivateFoofoo;为什么Spring总是选择父类(superclass)型Foo?这不应该是一个“不明确的”映射(并导致Spring抛出错误)吗?从技术上讲,您不是有两个Foo候选人吗?(例如,当从Foo中删除@Component时,Bar会自动选取...) 最佳答案

java - 在子类中调用父方法返回空值

我试图通过使用父方法但从子类中显示父类的变量值。publicclassA{publicstaticvoidmain(String[]args){Parentp1=newParent();p1.input();}}classParent{privateStringname;publicvoidsetName(StringnewName){name=newName;}publicStringgetName(){returnname;}publicvoidinput(){Stringq="hi";setName(q);Childc1=newChild();c1.input();}}class