简而言之,这是如何以及为什么可能的:Objectobj=newMyClass();Object是所有对象的父类(superclass),因此MyClass是Object的子类。一般来说,在Java中,为什么可以在父类中使用子类的构造函数?我明白它怎么可能反过来,因为子类拥有父类的所有变量/方法,所以当你初始化它们时,你只是在初始化父构造函数中指定的变量,这些变量按定义存在于child。问题是,当你反过来时,它不一定是真的。子项可以拥有父项没有的变量,那么当父项一开始甚至没有变量时,如何将子项构造函数与父项一起使用?这个特性在开发中有什么用?我想如果你想要一个B类的实例,你会把它声明为B
我有一个对象实例系统,其中包含对定义对象的引用。每个继承树都有一个顶级类。实例对象具有对相应定义类的泛型引用。在getter中使用泛型,顶级对象的子类无需转换即可获得正确的类型定义。但是,再次被子类化的抽象子类不能:classDef{}abstractclassAnimal{Ddef;DgetDef(){returndef;}}classCatDefextendsDef{}classCatextendsAnimal{}abstractclassBearDefextendsDef{}abstractclassBearextendsAnimal{}classBlackBearDefexte
以下可以吗?(请记住,我没有编写类的主体,也没有编写接口(interface);-))abstractclassSuperClassimplementsSuperInterfaceclassSubClassextendsSuperClassimplementsSubInterface或者这通常被认为是不好的做法?让我感到奇怪的是,以下内容不起作用:ListmyList;...for(SuperInterfacesi:myList){...} 最佳答案 不好也不坏。SubClass在这里实现了SuperInterface和SubInt
在this线程我发现了一些有趣的时刻,如果类仅用作父类(superclass),则没有规则使其抽象。为什么这样?谢谢 最佳答案 这完全取决于拥有该类的实例是否有意义。假设您有一个类Dog和一个类Cat。它们都扩展了Animal。现在一个Animal可能有一个名字和一些方法,但是让Animal跑来跑去是没有意义的。Animal是……一个抽象的概念。在其他情况下,您可能有子类(例如LinkedHashSetextendsHashSet),但实例化父类(superclass)(HashSet)仍然很有意义在这种情况下)。要回答您的评论,“
我(在某处)读到,当子类被垃圾回收时,不能保证调用父类的finalize(),这是否意味着大多数开发人员会覆盖finalize()在子类中调用super.finalize()? 最佳答案 Finalize不会自动为父类(superclass)调用。因此,如果您重写finalize,确保父类(superclass)得到清理的正确方法是protectedvoidfinalize(){try{//dosubclasscleanup}finally{super.finalize();}}请参阅这篇引用文章http://www.ibm.com
对于Cube类,我试图消除错误:Cube.java:12:error:constructorRectangleinclassRectanglecannotbeappliedtogiventypes;super(x,y);^required:int,int,double,doublefound:int,int.......我知道Cube的每个面都是一个Rectangle,其长度和宽度需要与Cube的边相同,但我不确定需要将什么传递给Rectangle构造函数以使其长度和宽度为与立方体的侧面相同。还尝试计算体积,即矩形面积乘以立方体边长这是立方体类//-------------------
让我们从另一个行为开始:即使您将方法/变量声明为私有(private),同一类的另一个实例也可以访问它。没关系,我可以忍受。我称这些为类私有(private)而不是实例私有(private)。现在是问题部分:例如,在运行时我希望能够检查this类中的所有String变量是否不为null,如果它们为null,则应将其更改为字符串“NULL”。我可以使用反射遍历变量并获取它们的值。但是,如果我扩展我的类并添加私有(private)或什至protected变量,我的基类将无法访问它们。我必须先对变量进行setAccessible,然后才能使用它们。所以请向我解释为什么基类(父类(superc
我有这个条件publicclassA{publicaction(){System.out.println("ActiondoneinA");}}publicclassBextendsA{publicaction(){System.out.println("ActiondoneinB");}}当我创建B的实例时,该操作将只执行B中的操作,因为它会覆盖父类(superclass)的操作。问题是在我的项目中,父类(superclass)A已经被使用了太多次,我正在寻找一种方法,在某些条件下,当我创建A的实例时,它会检查它是否为真,用B替换自己。publicclassA{publicA(){i
我有一个必须用参数构造的基类。在子类中,我需要在构造基类之前准备好这个参数,但在Java中,必须先调用super。处理这种情况的最佳方法是什么(参见下面的简单示例)。classBaseClass{protectedStringpreparedParam;publicBaseClass(StringpreparedParam){this.param=param;}}classChildClass{publicChildClass(Mapparams){//needtoworkwithparamsandprepareparamforsuperconstructorsuper(param);
有两个类Super1和Sub1Super1.classpublicclassSuper1{Super1(){this.printThree();}publicvoidprintThree(){System.out.println("PrintThree");}}Sub1.classpublicclassSub1extendsSuper1{Sub1(){super.printThree();}intthree=(int)Math.PI;publicvoidprintThree(){System.out.println(three);}publicstaticvoidmain(String