草庐IT

Inheritance

全部标签

java - 为什么分包看不到包私有(private)类?

好的,我有这个项目结构:包A.BclassSuperClass(这个类被标记为packageprivate)包A.B.C类子类(继承自父类(superclass))我不想让SuperClass公开可见...它实际上只是这个特定项目(A.B)的实用程序类。在我看来,SubClass应该可以看到SuperClass,因为包A.B.C是A.B的子包...但事实并非如此。解决此问题的最佳方法是什么?我认为将A.B.C中的所有内容移至A.B或将A.B移至A.B.C是没有意义的...主要是因为可能会有一个A.B.D也继承自A.B中的内容...我对Java有点陌生,所以请保持友好:D(我是C++和.

Java : Class inheriting self

我知道这毫无意义:我只是觉得这很有趣,我想进一步了解当您创建一个继承自身的类时会发生什么,导致堆栈溢出崩溃的机制。令人惊奇的是,Java允许您从一开始就构建这样的结构。我只是在猜测,但是JVM是将自己置于一个无限循环中,试图在实例化它之前解析该类,还是它实际上是在无休止地实例化该类的多个副本?我应该更具体一些;我正在使用内部类派生自封闭类。publicclassOutside{privateintoutsideValue;publicclassInsideextendsOutside{privateintinsideValue;publicInside(intval){insideVa

Java继承之谜

我在Java中创建了以下继承难题:Animal.javapublicclassAnimal{privateStringsound;publicvoidroar(){System.out.println(sound);}publicvoidsetSound(Stringsound){this.sound=sound;}}Tiger.javapublicclassTigerextendsAnimal{publicStringsound;publicTiger(){sound="ROAR";}}Jungle.javapublicclassJungle{publicstaticvoidmain

java - Java 中的继承是如何工作的?

我们有下一节课:classSuper{voidfoo(){System.out.println("Super");}}classSubextendsSuper{voidfoo(){super.foo();System.out.println("Sub");}}publicclassClazz{publicstaticvoidmain(String[]args){newSub().foo();}}输出是:SuperSub问题:super代表什么?它是父类的对象,哪个child保留为字段?如果是,抽象类的继承是如何工作的?您不能创建抽象类的实例。如果不是,覆盖的方法在哪里?我尝试用Goog

java - 为什么为继承而设计的类应该很少实现 Serializble 接口(interface)?

根据EffectiveJava:ClassesdesignedforinheritanceshouldrarelyimplementSerializable,andinterfacesshouldrarelyextendit.这种说法背后的原因是什么?换句话说,如果他们实现Serializable接口(interface)会出现什么问题? 最佳答案 同一项的下一句是这样说的:Classesdesignedforinheritance(Item17)shouldrarelyimplementSerializable,andinterf

java - 当我们实例化一个对象时,是否会创建父类(super class)的实例?

当我们在java中实例化一个特定的类时,是否会创建父类(superclass)的实例。如果是这种情况,那么实例化所有父类(superclass)的开销就会很大。我尝试了以下代码:publicclassAClass{publicAClass(){System.out.println("ConstructorA");}}publicclassBClassextendsAClass{publicBClass(){System.out.println("ConstructorB");}}publicclassTest{publicstaticvoidmain(String[]args){BCl

java - 继承方法返回引用类型

我遇到了thisquestion中描述的问题但想找到一个没有所有强制转换和@SuppressWarning注释的解决方案(如果可能的话)。更好的解决方案是通过以下方式建立在引用的解决方案之上:删除@SuppressWarning去除石膏此处提供的解决方案将根据标准获得2分。如果有超过2点的解决方案,赏金将用于解决方案中的大多数点数或“最优雅”的解决方案。 最佳答案 没有转换,没有@SuppressWarning,只有几行:publicabstractclassSuperClass>{protectedTthat;publicTcha

java - 父类和实现接口(interface)中同名的静态和非静态方法

我不是在问接口(interface)和抽象类之间的区别。个人工作成功,对吧?interfaceInter{publicvoidfun();}abstractclassAm{publicstaticvoidfun(){System.out.println("Abc");}}publicclassOvextendsAmimplementsInter{publicstaticvoidmain(String[]args){Am.fun();}}为什么会发生冲突? 最佳答案 static和非static方法不能在同一类中具有相同的签名。这是因

java - Java中的多重继承设计问题

你如何处理java中只有单一继承的问题?这是我的具体问题:我有三个(简化的)类:publicabstractclassAbstractWord{Stringkind;//egnoun,verb,etcpublicStringgetKind(){returnkind;}}publicclassWordextendsAbstractWord{publicfinalStringword;ctor...publicvoidsetKind(){//basedonthevariablewordcalculatekind..}}publicclassWordDescriptorextendsAbst

java - 为什么如果静态方法不涉及多态性(后期绑定(bind))我会看到无法覆盖静态方法的错误

请考虑以下代码:classA{publicstaticvoidm(Numbern){System.out.println("NumberA");};}classBextendsA{publicstaticintm(Numbern){System.out.println("NumberB");return1;};}输出:java:m(java.lang.Number)ininheritanceTest.Bcannotoverridem(java.lang.Number)ininheritanceTest.Areturntypeintisnotcompatiblewithvoid我知道静态