基本上,我想做的是强制子类调用一个抽象父类(superclass)方法(在子类中实现),所以我不必每次创建一个新的时都显式地写它子类。我曾在父类(superclass)的构造函数中写过一次,因为我希望它在每次实现时都强制执行。publicabstractclassSupahClass{publicSupahClass(){doStuff();//ItISexecutedwhenthesubclassconstructoriscalledinit();//NOTexecuted,eventhoughit'simplemented}privatevoiddoStuff(){...}prot
我正在创建一个员工工资系统。我有一个抽象的Employee类。WageEmployee和Manager扩展Employee。然后Programmer和SalesPerson扩展WageEmployee。我的问题是我想创建一个SalesManager。SalesManger通过添加佣金和薪水来计算他们的报酬。所以他们有类型SalesPerson和Manager。我应该创建一个接口(interface)什么?SalesPerson应该扩展什么?很自然地从经理扩展SalesManager,然后使SalesPerson成为一个接口(interface)。但我不能,因为它继承自WageEmplo
我有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)),但我可以想象这会变得困难的情况。
classA{staticintsuper_var=1;static{System.out.println("super");}}classBextendsA{staticintsub_var=2;static{System.out.println("sub");}}publicclassDemo{publicstaticvoidmain(String[]args){System.out.println(B.super_var);}}输出是:super1这意味着子类不会加载或任何其他事情?它是如何工作的? 最佳答案 当您在子类引用上
我有2个子类:Staff、Student他们属于父类(superclass)Person。这是我老师给的代码(任务):publicclassPerson{privateStringname;privateintyearOfBirth;/***Createapersonwithgivennameandage.*/Person(Stringname,intyearOfBirth){this.name=name;this.yearOfBirth=yearOfBirth;}}classStudentextendsPerson{privateStringSID;//studentIDnumber
有没有办法让toString()包含超class的私有(private)字段?我尝试添加super.toString(),但是没用。请看下面的代码员工.javapackagetest;publicclassEmployee{privateStringname;privateintid;privatedoublesalary;publicEmployee(Stringname,intid,doublesalary){super();this.name=name;this.id=id;this.salary=salary;}publicdoublegetSalary(){returnsal
我在查看旧代码库时发现了一个只调用其父级的方法:@Overridepublicvoidselect(Objectitem){super.select(item);}这种方法有什么用例吗?对我来说,我似乎可以删除它。 最佳答案 删除它几乎没有任何区别。使用反射并在对象上查找select方法时,您会看到不同之处。如果您要求告诉反射不要查看对象的基类,则删除它后它不会找到该方法。 关于java-覆盖方法只调用父方法-有用吗?,我们在StackOverflow上找到一个类似的问题:
我只是好奇他们的待遇是否有所不同。例如,如果我们有:界面:publicinterfaceTest{publicvoidmethod();}和抽象类:publicabstractclassTest{publicabstractvoidmethod();}JVM会以不同方式对待这些类吗?两者中哪一个在存储期间占用更多磁盘空间,哪个将使用最多的运行时内存哪个执行更多操作(性能更好).这个问题不是关于何时使用接口(interface)或抽象类。 最佳答案 Yes,theyaredifferent.Withaninterface,client
考虑来自官方OpenJDKsource的这段代码java.awt.font.TextLayout的:publicfinalclassTextLayout{/*...*/protectedvoidhandleJustify(floatjustificationWidth){//nevercalled}}这里的用例是什么?为什么通常编写这样的代码可能有意义? 最佳答案 protected成员仍然可以通过同一包中的代码访问。我的猜测是这个类在一些早期的(可能甚至不是公共(public)的)版本中曾经是非最终的,然后变成了最终的,并且pro
在Java中,导入与(外部)类相关,因为每个(外部)类都应该在单独的文件中编码。因此,可以声称类定义之前的import...;指令与类相关联(有点像注释)。现在,如果可以继承父类的导入,那将大大减少源文件的困惑。为什么这不可能?即为什么Java编译器不应该考虑基类的导入?注意事项:可能有不止一个答案。我知道如果您让eclipse组织您的导入,这不是什么大问题,无需提及。这是关于“为什么”,而不是“如何”(a-la-this)。 最佳答案 首先,重要的是要注意并非每个类都必须在单独的文件中编码-但每个公共(public)顶级类都必须是