我有以下Java示例类:publicclassA{}publicclassSuper{protectedSuper(){}publicSuper(Aa){}}publicclassSubextendsSuper{}publicclassConsumer{publicConsumer(){Subsub=newSub(newA());//compilererror}}编译器错误指出参数不能应用于Sub中的默认构造函数,这是完全可以理解的。我很好奇的是这个决定背后的理由。Java在Sub中生成默认的空构造函数;为什么在这种情况下不能在幕后调用它?这主要是理智的手持情况,还是有技术原因?编辑我
在clone方法的通常实现中有一些我不明白的地方。如果您查看以下代码中tryblock的第一行,我们正在调用super.clone(),它将创建父类(superclass)的实例,并返回对该实例的Object引用。现在,该实例不一定包含hireDay,那么我们怎么说copy.hireDay?它确实可以正常编译,但如果实例不包含hireDay,它不会崩溃吗?publicObjectclone(){try{Employeecopy=(Employee)super.clone();//copyID,name,andsalary!copy.hireDay=(Date)hireDay.clone
我是java新手,对以下代码有2个问题:classAnimal{}classDogextendsAnimal{}classCatextendsAnimal{}classRatextendsAnimal{}classMain{Listanimals=newArrayList();publicvoidmain(String[]args){animals.add(newDog());animals.add(newRat());animals.add(newDog());animals.add(newCat());animals.add(newRat());animals.add(newCat
考虑这种情况。有地block,有的是住宅地block,有的是商业地block。也有业主。但是业主只能购买一block地block,它可以是住宅或商业。所以,这是我的代码。@Entity@Table(name="PLOT")@Inheritance(strategy=InheritanceType.JOINED)publicabstractclassPlot{privateintid;privateStringnumber;privateListowners=newArrayList();//gettersandsetters...}@Entity@Table(name="RESIDEN
作为主题中一般问题的一个实际例子,我想实现containsAllSet中的方法接口(interface)publicbooleancontainsAll(Iterablec){/*...*/}我认为这应该被允许,因为Collection是Iterable意思是这样的containsAll将涵盖接口(interface)要求。同样,更一般地说,能够实现带有参数父类(superclass)的接口(interface)似乎应该可行。但是,Eclipse说不行(还没有尝试直接使用javac)——有人可以解释一下原因吗?我敢肯定规范中有一些东西让它成为现在的样子,但我也想了解需求的动机。还是我错
为什么不允许System.out.println(super)?System.out.println(this);这没关系,this.toString()被自动调用和打印。当然,用实例变量代替this也是可以的。但是,this和super可以按照我所知道的方式使用。System.out.println(super);那么为什么会失败呢?我认为它应该隐式调用super.toString()。我已经阅读了Java规范文档,但我没有找到原因。 最佳答案 在http://java.sun.com/docs/books/jls/second_
我有三个JUnit测试类,它们都有一些通用代码,包括相同的setup()方法。因此,我将这段代码分解到它自己的扩展TestCase的类中,现在三个早期的JUnit测试类扩展了这个新类。新的父类(superclass)本身不包含任何测试。但是,在我们的构建中,JUnit运行所有JUnit测试类,包括没有测试的新父类(superclass)。它给出了这个错误:junit.framework.AssertionFailedError:Notestsfoundincom.acme.ControllerTest我可以通过创建一些在ControllerTest中不执行任何操作的简单测试来消除此错误
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Useof‘super’keywordwhenaccessingnon-overriddensuperclassmethods我是Java的新手,最近阅读了很多有关它的文章,以获取更多关于该语言的知识和经验。当编译器插入自动代码时,我有一个关于继承方法和扩展类的问题。我一直在阅读,如果我使用一些方法创建类A,比如一个名为checkDuePeriod()的方法,然后创建一个扩展类A及其方法的类B。如果我随后在B类中调用方法checkDuePeriod()而不使用super.checkDuePeriod()语法,
我想就此进行一些讨论,但我无法为我的案例推断出答案。仍然需要帮助。这是我的代码:packageJustRandomPackage;publicclassYetAnotherClass{protectedintvariable=5;}packageFirstChapter;importJustRandomPackage.*;publicclassATypeNameProgramextendsYetAnotherClass{publicstaticvoidmain(String[]args){YetAnotherClassbill=newYetAnotherClass();System.o
在Java中,如果原始抽象方法不存在异常(重写方法不抛出异常),则不能指定重写抽象方法抛出。但是在Scala你可以做到这一点,因为它没有检查异常。很好,但是如果您使用@throws注释应该会提示Java编译器正在发生的事情,对吗?鉴于此Scala代码:packagemyscalaabstractclassSFoo{defbar():Unit}classSFoobarextendsSFoo{@throws[Exception]overridedefbar():Unit={thrownewException("hithere")}}我有两个不同的Java程序,其中一个将在运行时编译并运行到