草庐IT

Inheritance

全部标签

java - 继承带有边界扩展的通用内部类的编译错误

我在编译带有内部类的泛型类时遇到问题。该类扩展了泛型类,内部类也是。这里实现了接口(interface):publicinterfaceIndexIteratorextendsIterator{...}通用父类(superclass):publicabstractclassCompoundCollection>implementsCollection{...protectedclassCompoundIterator>implementsIterator{...}}带有编译器错误的泛型子类:publicclassCompoundListextendsCompoundCollection

java - java中的 "extends"和 "implements"在性能和内存等方面有什么区别

Java中的extends和implements在性能和内存等方面有什么区别?例如采取以下场景,1)publicinterfacePrintResult{publicfinalintNO_ERROR=0;publicfinalintSUCCESS=1;publicfinalintFAILED=-1;}publicclassPrintProcessimplementsPrintResult{//Performsomeoperation}2)publicclassPrintResult{publicfinalintNO_ERROR=0;publicfinalintSUCCESS=1;pub

java - Java 如何选择调用哪个重载函数?

这是一个纯理论问题。给定三个简单的类:classBase{}classSubextendsBase{}classSubSubextendsSub{}还有一个用于对这些类进行操作的函数:publicstaticvoiddoSomething(Baseb){System.out.println("BASECALLED");}publicstaticvoiddoSomething(Subb){System.out.println("SUBCALLED");}似乎是下面的代码:SubSubss=newSubSub();doSomething(ss);可能合法地导致打印BASECALLED或SU

java - 直觉与设计原则

我有一个像这样的类层次结构Beverage->Coffee->Latte。其中Beverage是由Coffee扩展的abstract父类(superclass)。Coffee类随后添加了一些行为,但也是抽象。Latte扩展了Coffee类并且是一个具体类。我在这里使用继承来添加行为。而且继承确实有缺点,比如父类(superclass)方法的可见性,使代码脆弱,代码紧耦合。因此,编程原则规定Composition应该优先于Inheritance。但在这种情况下,inheritance感觉很自然,因为Latte是Coffee的一种,而Coffee是Beverage使用composition

java - 对子类实例使用父类(super class)类型

我知道这个问题已经被问了很多,但我认为通常的答案远不能令人满意。给定以下类层次结构:classSuperClass{}classSubClassextendsSuperClass{}为什么人们使用这种模式来实例化子类:SuperClassinstance=newSubClass();而不是这个:SubClassinstance=newSubClass();现在,我看到的通常答案是,这是为了将instance作为参数发送给需要SuperClass实例的方法,如下所示:voidaFunction(SuperClassparam){}//somewhereelseinthecode.....

java - 为什么我需要提供封闭类对象而不是封闭类对象

classOuterA{classInnerA{}}classSubclassCextendsOuterA.InnerA{SubclassC(OuterAouterRef){outerRef.super();}}classXYZ{publicstaticvoidmain(String[]args){newSubclassC(newOuterA());}}在上面的代码中为什么我需要将OuterA对象引用传递给要编译的.java文件的SubclassC构造函数?为什么不需要将InnerA对象引用传递给SubclassC构造函数? 最佳答案

java - System.in 属于什么输入类,为什么?

代码importjava.io.*;classioTest1{publicstaticvoidmain(Stringargs[]){System.out.println(System.in.getClass());}}返回System.in属于BufferedInputStream类。这是为什么?由于System类将System.in定义为InputStream,我可以看出结果并非不可能。但是为什么前面的代码不能返回另一个继承自InputStream的类,例如DataInputStream? 最佳答案 正如评论中所解释的,没有什么可

java - 覆盖非抽象方法是好的做法吗?

我有一种情况需要修改父类(superclass)方法以具有子类特定的逻辑,但方法逻辑对于所有其他子类都是相同的。我有两个选择:1)使方法抽象化,并为除我关注的子类之外的每个方法重复相同的代码。2)在我想要更改逻辑的相关子类中重写非抽象方法。在Java中覆盖非抽象方法是一种好的做法吗?以及在概念上b/w覆盖非抽象方法与抽象方法的区别是什么。 最佳答案 在某种程度上,这是一种风格问题。这是一种常见的做法-但也有人告诉您任何方法都不应有多个实现。这些人声称继承层次结构中的多个实现会导致难以调试的代码——因为您必须非常小心地确定实际调用此类

java - 从扩展外部类本身的内部类中访问外部类成员

在下面显示的代码片段中,一个内部类继承了一个外部类本身。packagetest;classTestInnerClass{privateStringvalue;publicTestInnerClass(Stringvalue){this.value=value;}privateStringgetValue(){returnvalue;}publicvoidcallShowValue(){newInnerClass("Anothervalue").showValue();}privatefinalclassInnerClassextendsTestInnerClass{publicInne

java - 扩展 JFrame

扩展JFrame而不是创建新JFrame的优缺点是什么?例如:publicclassTestextendsJFrame{setVisible(true);}或publicclassTest{JFrametest=newJFrame():test.setVisible(true);} 最佳答案 你不应该扩展一个类,除非你真的想扩展它的功能,在你展示的例子中,你应该使用选项2,因为选项1是对extending的滥用功能。换句话说-只要问题的答案isTestaJFrame?是NO,它就不应该扩展JFrame.