草庐IT

java - 抽象父类(super class)的默认接口(interface)方法

假设我有以下结构:abstractclassA{abstractbooleanfoo();}interfaceB{defaultbooleanfoo(){returndoBlah();}}classCextendsAimplementsB{//functionfoo}Java现在会提示类C必须从A实现抽象方法foo。通过在C中重新定义函数并简单地调用B.super.foo();,我可以相对轻松地解决这个问题。但是我不明白为什么接口(interface)B中的默认函数本身不能满足这个要求,我想更好地了解java的底层机制。 最佳答案

java - 为什么调用父类(super class)方法?

classOne{publicvoiddoThing(Oneo){System.out.println("One");}}classTwoextendsOne{publicvoiddoThing(Twot){System.out.println("Two");}}publicclassUgly{publicstaticvoidmain(String[]args){Twot=newTwo();Oneo=t;o.doThing(newTwo());}}结果:一classOne{publicvoiddoThing(Oneo){System.out.println("One");}}class

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

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

java - 当父类(super class)默认构造函数具有 'throws' 子句时,为什么我会收到未报告的异常?

当我运行以下代码时出现未报告的异常我的代码如下图classSuper{publicSuper()throwsException{System.out.println("SuperClass");}}publicclassSubextendsSuper{publicstaticvoidmain(String[]args)throwsException{Subs=newSub();}}出现以下错误:Sub.java:6:默认构造函数中未报告的异常java.lang.Exception公共(public)类Sub扩展Super{1个错误 最佳答案

java - 为什么我的原始类型参数方法不覆盖包装类型参数的父类(super class)方法?

publicclassWrapperClasses{voidoverloadedMethod(NumberN){System.out.println("NumberClassType");}voidoverloadedMethod(DoubleD){System.out.println("DoubleWrapperClassType");}voidoverloadedMethod(LongL){System.out.println("LongWrapperClassType");}publicstaticvoidmain(String[]args){inti=21;WrapperCla

Java泛型,如何强制扩展父类(super class)具有相同类型的方法的两个参数?

假设我有一个如下的类层次结构:classVehicle;classCarextendsVehicle;classPlaneextendsVehicle;我有一个比较两个对象的函数publicgenerateDiff(Toriginal,Tcopy)上述方法在编译时保证两个对象都是Vehicle,但不能保证两个对象的类型相同。generateDiff(newCar(),newCar());//OKgenerateDiff(newPlane(),newPlane());//OKgenerateDiff(newCar(),newPlane());//WRONG我可以在编译时使用泛型实现吗?P

java - 在调用父类(super class)的构造函数之前,有什么方法可以在 Java 中初始化子类的成员变量?

我需要这个,因为父类(superclass)中的构造函数正在调用一个在子类中被覆盖的方法。该方法返回一个值,该值传递给子类的构造函数。但是父类(superclass)构造函数必须在子类构造函数之前调用,所以我没有机会保存传入的值。 最佳答案 从父类(superclass)构造函数调用重写的方法根本行不通-不要这样做父类(superclass)构造函数必须始终在子类构造函数之前完成。当父类(superclass)构造函数正在执行时,所讨论的对象是父类(superclass)的(半初始化)实例,而不是子类!因此,如果您尝试从构造函数调用

java - 覆盖java中的方法然后将对象转换为父类行为

我有一个父类A和一个子类B,B重写了A的方法f。publicclassA{publicStringf(){return"A";}}publicclassBextendsA{...publicStringf(){return"B";}publicstaticvoidmain(String[]args){Bb=newB();Aa=(A)b;System.out.println(b.f());//prints:B}}我创建了一个B类型的对象b,并将其转换为A类型并将其分配给A类型的变量a,然后调用a上的方法f。现在我希望调用父类的方法,因为我正在使用类型A的对象,但它没有,它调用方法的b版本

java - Comparator<String> 必须覆盖父类(super class)方法

我正在制作TreeMap并希望以降序排列。我创建了以下比较器:Comparatordescender=newComparator(){@Overridepublicintcompare(Stringo1,Stringo2){returno2.compareTo(o1);}};我像这样构建TreeMap:myMap=newTreeMap(descender);但是,我收到以下错误:Themethodcompare(String,String)oftypenewComparator(){}mustoverrideasuperclassmethod我从来没有完全理解泛型,我做错了什么?

java - 使用父类(super class) "protected final"方法为子类保留公共(public)代码

作为一个(迂腐的)初学者Java程序员,我想知道,将所有子类使用的公共(public)代码块移动到单独的protected(final)父类中的方法?诸如用通用值填充列表或通用过滤算法等任务...是否也可以使用protected静态方法?classA{protectedfinalListgetVariants(){...}protectedfinalListfilterResults(Listvariants){...}}classBextendsA{publicListdoSomethingUsefull(){ListcommonVariants=getVariants();...r