我需要在Java中克隆一个子类,但在发生这种情况的代码中,我不知道子类类型,只知道父类(superclass)。执行此操作的最佳设计模式是什么?例子:classFoo{StringmyFoo;publicFoo(){}publicFoo(Fooold){this.myFoo=old.myFoo;}}classBarextendsFoo{StringmyBar;publicBar(){}publicBar(Barold){super(old);//copiesmyFoothis.myBar=old.myBar;}}classCopier{Foofoo;publicFoomakeCopy(
我有classA{intvar;publicA(intx){var=x;}}classBextendsA{intvar2;publicB(intx,inty){super(...);var2=y;x=f(y);}}对于子类B,我需要计算在A的构造函数中使用的值x。如果我可以自由地将super移动到我的x=f(y)然后我可以将结果传递给A(super)的构造函数。但是super必须是B的构造函数中的第一行。有什么方法可以在第一次用正确的值初始化A吗?如果A.var是最终的并且我无法在构造后返回并更改它怎么办?当然,我可以放置super(f(y)),但我可以想象这会变得困难的情况。
我有这4个java类:1publicclassRect{doublewidth;doubleheight;Stringcolor;publicRect(){width=0;height=0;color="transparent";}publicRect(doublew,doubleh){width=w;height=h;color="transparent";}doublearea(){returnwidth*height;}}2publicclassPRectextendsRect{doubledepth;publicPRect(doublew,doubleh,doubled){wi
您好,我想知道是否有解决我的问题的简单方法,我有一个ArrayList:ArrayListanimalList=newArrayList();/*IaddsomeobjectsfromsubclassesofAnimal*/animalList.add(newReptile());animalList.add(newBird());animalList.add(newAmphibian());它们都实现了一个方法move()-当调用move()时Bird会飞。我知道我可以使用这个访问父类(superclass)的通用方法和属性publicvoidfeed(IntegeranimalIn
我在一项任务中遇到了瓶颈,一直在梳理网站以寻找任何有用的东西(空无一物)。我需要创建一个类,该类中的一个构造函数,然后是一个子类来扩展父类(superclass)。然后,我需要创建一个包含main方法的新文件来演示这两种情况。没问题,概念上。我的问题是:如何使用构造函数初始化一个对象,但需要用户输入?现在我得到的错误是:“类CarRental中的构造函数CarRental不能应用于给定类型;必需:字符串,整数,字符串,整数发现:没有参数原因:实际和形式参数列表的长度不同"请不要对“错误告诉您问题所在”进行冷嘲热讽。不,它没有告诉我它是什么。我是这方面的小宝贝,需要一点帮助。我将在下面粘
我一直在学习继承,我只是好奇。我知道即使您不使用super()运算符,子类也会自动调用父类(superclass)的构造函数,所以我想知道子类是否有必要在其中包含构造函数. 最佳答案 如果父类(superclass)没有默认构造函数(或具有子类无法访问的构造函数),则子类需要一个构造函数。如果子类根本没有构造函数,编译器将自动创建一个public构造函数,它只是调用父类(superclass)的默认构造函数。关于调用super():每个构造函数必须做的第一件事是通过调用this()(可能带有一些参数)来调用同一类中的不同构造函数)或
我看到一些Java示例使用this关键字来获取父类(superclass)方法。示例:this.superClassMethod()。通常情况下我们会使用super。有人可以举例说明为什么开发人员使用this而不是super吗?谢谢你。 最佳答案 this.method()和super.method()没有区别,直到method()得到在调用者的类中覆盖。例如,用classSuperClass{publicvoidmethod(){System.out.println("SuperClass");}}classSubClassext
我有一个获取SResource对象列表的方法publicstaticListlistTriples(Listsubjects){//...dostuff}为什么我不能这样做ListresultsAsList=newArrayList();resultsAsList.addAll(allResults.keySet());//Icouldpossiblenotuselistsandjustusesetsandthereforegetridofthisline,butthatisadifferentissueListtriples=newArrayList();triples=Triple
关于在Java中访问protected成员的问题已经被问过并回答过很多次,例如:Java:protectedaccessacrosspackages但是我不明白为什么要这样实现,参见《JavaProgrammingLanguage》(第4版)的解释:“限制背后的原因是:每个子类继承父类(superclass)的契约并以某种方式扩展该契约。假设一个子类作为其扩展契约的一部分,对父类(superclass)的protected成员的值施加约束父类(superclass)。如果不同的子类可以访问第一个子类对象的protected成员,那么它可以以破坏第一个子类契约的方式操纵它们,这是不允许的
我发现我可以在子类中这样做:ParentClass.variable=value;但有人告诉我,更好的做法是使用get/set方法,而不是直接访问类外的变量。尽管这是针对我在另一个类中有该类的实例的情况,而不是针对子类和父类(superclass)。那么有没有更好的方法来做到这一点,哪种方法通常被认为是最佳实践? 最佳答案 您有很多选择。super.field=x您必须有权访问该字段才能执行此操作field=x您必须有权访问该字段才能执行此操作。您也不能在child中有另一个字段,否则只会设置child的字段。setParentFi