我在编译带有内部类的泛型类时遇到问题。该类扩展了泛型类,内部类也是。这里实现了接口(interface):publicinterfaceIndexIteratorextendsIterator{...}通用父类(superclass):publicabstractclassCompoundCollection>implementsCollection{...protectedclassCompoundIterator>implementsIterator{...}}带有编译器错误的泛型子类:publicclassCompoundListextendsCompoundCollection
Java中的extends和implements在性能和内存等方面有什么区别?例如采取以下场景,1)publicinterfacePrintResult{publicfinalintNO_ERROR=0;publicfinalintSUCCESS=1;publicfinalintFAILED=-1;}publicclassPrintProcessimplementsPrintResult{//Performsomeoperation}2)publicclassPrintResult{publicfinalintNO_ERROR=0;publicfinalintSUCCESS=1;pub
这是一个纯理论问题。给定三个简单的类:classBase{}classSubextendsBase{}classSubSubextendsSub{}还有一个用于对这些类进行操作的函数:publicstaticvoiddoSomething(Baseb){System.out.println("BASECALLED");}publicstaticvoiddoSomething(Subb){System.out.println("SUBCALLED");}似乎是下面的代码:SubSubss=newSubSub();doSomething(ss);可能合法地导致打印BASECALLED或SU
我有一个像这样的类层次结构Beverage->Coffee->Latte。其中Beverage是由Coffee扩展的abstract父类(superclass)。Coffee类随后添加了一些行为,但也是抽象。Latte扩展了Coffee类并且是一个具体类。我在这里使用继承来添加行为。而且继承确实有缺点,比如父类(superclass)方法的可见性,使代码脆弱,代码紧耦合。因此,编程原则规定Composition应该优先于Inheritance。但在这种情况下,inheritance感觉很自然,因为Latte是Coffee的一种,而Coffee是Beverage使用composition
我知道这个问题已经被问了很多,但我认为通常的答案远不能令人满意。给定以下类层次结构:classSuperClass{}classSubClassextendsSuperClass{}为什么人们使用这种模式来实例化子类:SuperClassinstance=newSubClass();而不是这个:SubClassinstance=newSubClass();现在,我看到的通常答案是,这是为了将instance作为参数发送给需要SuperClass实例的方法,如下所示:voidaFunction(SuperClassparam){}//somewhereelseinthecode.....
classOuterA{classInnerA{}}classSubclassCextendsOuterA.InnerA{SubclassC(OuterAouterRef){outerRef.super();}}classXYZ{publicstaticvoidmain(String[]args){newSubclassC(newOuterA());}}在上面的代码中为什么我需要将OuterA对象引用传递给要编译的.java文件的SubclassC构造函数?为什么不需要将InnerA对象引用传递给SubclassC构造函数? 最佳答案
代码importjava.io.*;classioTest1{publicstaticvoidmain(Stringargs[]){System.out.println(System.in.getClass());}}返回System.in属于BufferedInputStream类。这是为什么?由于System类将System.in定义为InputStream,我可以看出结果并非不可能。但是为什么前面的代码不能返回另一个继承自InputStream的类,例如DataInputStream? 最佳答案 正如评论中所解释的,没有什么可
我有一种情况需要修改父类(superclass)方法以具有子类特定的逻辑,但方法逻辑对于所有其他子类都是相同的。我有两个选择:1)使方法抽象化,并为除我关注的子类之外的每个方法重复相同的代码。2)在我想要更改逻辑的相关子类中重写非抽象方法。在Java中覆盖非抽象方法是一种好的做法吗?以及在概念上b/w覆盖非抽象方法与抽象方法的区别是什么。 最佳答案 在某种程度上,这是一种风格问题。这是一种常见的做法-但也有人告诉您任何方法都不应有多个实现。这些人声称继承层次结构中的多个实现会导致难以调试的代码——因为您必须非常小心地确定实际调用此类
在下面显示的代码片段中,一个内部类继承了一个外部类本身。packagetest;classTestInnerClass{privateStringvalue;publicTestInnerClass(Stringvalue){this.value=value;}privateStringgetValue(){returnvalue;}publicvoidcallShowValue(){newInnerClass("Anothervalue").showValue();}privatefinalclassInnerClassextendsTestInnerClass{publicInne
扩展JFrame而不是创建新JFrame的优缺点是什么?例如:publicclassTestextendsJFrame{setVisible(true);}或publicclassTest{JFrametest=newJFrame():test.setVisible(true);} 最佳答案 你不应该扩展一个类,除非你真的想扩展它的功能,在你展示的例子中,你应该使用选项2,因为选项1是对extending的滥用功能。换句话说-只要问题的答案isTestaJFrame?是NO,它就不应该扩展JFrame.