我正在构建一个通用的Tree类,支持子树的继承。但是我遇到了一些问题。你能帮我吗?描述让我们定义Tree类和BlueTree类,其中BlueTreeextendsTree.让我们定义Leaf类和RedLeaf类,其中RedLeafextendsLeaf.它们用作树包含的“数据”。一个Tree表示Tree类型的树,其“数据”的类型为Leaf.继承(这不是正确的Java继承):Tree可以有类型的childTree,Tree,BlueTree,和BlueTree..Tree可以有类型的childTree,和BlueTree,但不是Tree,或BlueTree..BlueTree可以有类型的
有没有办法从基类实例中找出派生类的名称?例如:classA{....}classBextendsA{...}classcextendsA{...}现在如果一个方法返回一个A的对象,我能找出它是B还是C类型吗? 最佳答案 使用instanceof或Class#getClass()Areturned=getA();if(returnedinstanceofB){..}elseif(returnedinstanceofC){..}getClass()将返回以下任一个:A.class、B.class、C.class在if子句中你需要向下转型
所以我一直在为我的编程课做一个关于抽象的作业,结果遇到了一个问题。我现在的目标是能够使用抽象,然后能够用矩形和椭圆绘制一个简单的城市,比如矩形建筑或灯柱上的椭圆灯。我在编译时收到的错误是:MyTestApp.Rectangle不是抽象的并且不会覆盖MyTestApp.Shape中的抽象方法drawEllipse(java.awt.Graphics)。此错误显示在Shape类正下方的“classRectangleextendsShape{”行上。我的问题是我的抽象做错了什么?一段时间以来,我一直在研究Rectangle和Ellipse类中的构造函数和draw()方法,但仍然没有找到解决方
我想要一个接口(interface)A由T参数化A,并且还希望实现它的每个类也实现Comparable(带有T及其子类型)。写成interfaceAextendsComparable似乎很自然,但这不起作用。那我该怎么办呢? 最佳答案 当Comparable出现这意味着你有一个Comparable的实例可以与T的一个(未知)子类型进行比较,并不是说它可以与T的任何子类型相比较。但你不需要那个,因为Comparable可以将自己与T的任何子类型进行比较无论如何,例如一个Comparable可以将自己与Comparable进行比较.所以
我有一个实现可序列化的类。现在我扩展了这个类,我希望这个扩展类是不可序列化的。那怎么办呢?例如。我有classAimplementsSerializable.我有classBextendsA.但我希望B类是不可序列化的。 最佳答案 您不能删除接口(interface),但可以在运行时阻止序列化:classBextendsA{privatevoidwriteObject(ObjectOutputStreamoos)throwsIOException{thrownewNotSerializableException();}}
这个问题在这里已经有了答案:HowtoquicklydetermineifamethodisoverriddeninJava(9个回答)关闭5年前。如何判断方法是否被子类覆盖?例如,publicclassTest{staticpublicclassB{publicStringm(){return"FromB";};}staticpublicclassB1extendsB{}staticpublicclassB2extendsB{publicStringm(){return"fromB2";};}/***@paramargs*@throwsFileNotFoundException*/p
publicclassMain{publicstaticvoidmain(String[]args){System.out.println(B.x);}}classA{publicstaticStringx="x";}classBextendsA{static{System.out.print("InsideB.");}}问题:为什么输出会是:x。但不是:InsideB.x 最佳答案 对B.x的引用发出以下字节码:getstatic#3根据JavaVirtualMachineSpecTheJavavirtualmachineinst
所以当我遇到这个-对我来说-奇怪的现象时,我正在测试一些代码片段以围绕继承的概念。所以首先我测试了这个简单的代码:publicclassMain{publicstaticvoidmain(String[]args){Barbar=newBar();System.out.println("age="+bar.age);bar.test();}}classFoo{intage=2;voidtest(){System.out.println("TESTFOO");}}classBarextendsFoo{intage=4;voidtest(){System.out.println("TEST
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion构造函数也可以像任何其他方法一样被重载,我知道这一点。由于一项任务,我决定使用具有多个构造函数的抽象父类(superclass):抽象父类(superclass):protectedListSortierer(){this(null,null);}protectedListSortierer(Listli){this(li,null);}protectedListSortierer(Com
Collection接口(interface)有多个方法。List接口(interface)扩展了Collection接口(interface)。它声明与Collection接口(interface)相同的方法?为什么会这样?例如interfaceCollectionextendsIterable{publicabstractintsize();publicabstractbooleanisEmpty();publicabstractbooleancontains(java.lang.Object);publicabstractjava.util.Iteratoriterator();