Tag: inheritance

是否可以使用扩展超类’方法参数的参数覆盖超类’方法?

说我有一个这样的课: abstract class Something {} 它有一个延伸它的类的层次结构: class FirstSomething extends Something {} class SecondSomething extends Something {} 然后在其他地方,我有一个课程利用这些东西: abstract class A { public void setSomething(Something something) { //Process the something } } 我能够指定A的子类,以便它覆盖setSomething方法,使用更具体的“某事”类吗? 这是我希望能够做到的: class B extends A { @Override public void setSomething(FirstSomething something) { //Process the something } class C extends A { @Override public […]

怎么纠正? – “都定义了getObjectCopy(),但是使用了不相关的返回类型” – 但它是* one *函数

我有以下界面heirarchy(所有不相关的function被剥离)。 我在尝试编译时收到此错误: types ValidLineGettable and ValidateValue are incompatible; both define getObjectCopy(), but with unrelated return types 这一切都来自同一个函数 – 不是两个不同的函数具有相同的名称, 在同一个接口中具有相同的function 。 如何处理必须从两个不同的接口inheritance的接口,这两个接口本身必须从单个基接口inheritance? 我发现有两个关于具有相同名称的不同function的SO问题 使用不相关的返回类型inheritance方法 Java – 接口实现中的方法名称冲突 就我而言,它在概念上和名义上都是相同的function。 (虽然我对如何开始使用Copyable界面是个好主意感兴趣…这是我使用的很多代码,并且对我来说效果很好……我最感兴趣的是一般inheritance/设计问题。) 我不清楚如何最好地处理这个问题。 我很感激任何建议。 谢谢。 public interface Copyable { Copyable getObjectCopy(); } interface ValidateValue extends Copyable { //Other functions… @Override ValidateValue getObjectCopy(); } //For classes that may be […]

与Javainheritance混淆

我目前正在通过AP CS考试学习指南,我已经了解了最新情况。 假设我有一个名为Employee的类,我有另一个inheritanceEmployee的类叫做Manager。 以下声明之间有区别吗? Employee empl1 = new Manager(); Manager empl2 = new Manager(); 我基本上混淆了对象名称之前的术语是什么,以及它与新术语之后的术语有何不同。 任何帮助表示赞赏。

用Java中的构造函数inheritance

你能告诉我下面代码中的问题吗? class boxdemo1 { public static void main(String args[]) { boxweight weightbox = new boxweight(2, 3, 5, 4); System.out.println(weightbox.volume()); } } class boxinfo { int l, b, h; /* * boxinfo() { l=b=h=-1; } */ boxinfo(int a, int b, int c) { l = a; this.b = b; h = c; } int volume() { […]

覆盖Java中的generics集合时出错

当我尝试覆盖一个采用List ,我得到以下编译错误 。 此行有多个标记: – 子类型的方法getname(List)必须覆盖或实现超类型方法 – 名称冲突:类型为child的方法getname(List)与parent类型的getname(List)具有相同的擦除,但不会覆盖它 我的印象是,由于擦除 ,采用List的方法和采用List的子类方法将被视为被覆盖 ,因为擦除后两种方法的签名都相同。 以下是涉及擦除的 方法签名的定义。 我不明白为什么会出现这个错误,究竟是什么意思。 我的代码如下: class parent { public void getname(List num) { System.out.printf(“parent class: %s”,num); } } class child extends parent { @Override // here is the compile error public void getname(List num) { System.out.printf(“child class: %s”,num); } }

使用Java中的接口的匿名内部类

因此,当查看lambda表达式并使用它们来替换Java中的EventHandlers的匿名内部类时,我遇到了一些让我停下来思考的匿名内部类。 例如,在为通常实现ActionListener的东西编写匿名内部类时,我们编写 myJButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e){ //DO SOMETHING } }); 我对此感到困惑的是,ActionListener是一个界面,所以我认为有必要做一些像… myJButton.addActionListener(new myButtonListener implements ActionListener() { @Override public void actionPerformed(ActionEvent e){ //DO SOMETHING } }); 但这甚至都没有编译。 我想我之所以这是显而易见的,相反我们使用私有内部类,我们使用 private MyButtonListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { //DO SOMETHING } } myJButton.addActionListener(new MyButtonListener()); 所以我的问题是: 1)为什么我们能够直接从接口创建匿名内部类而不必通过实现接口的类创建一个? 2)为什么我无法创建一个实现ActionListener的匿名内部类而不是直接来自它,就像我在第二个代码片段中显示的那样?

我的Java代码出错,但我看不出它有什么问题。 救命?

我得到的错误是在while循环中的fillPayroll()方法中,它表示payroll.add(employee)。 错误说我不能在数组类型Person上调用add()但是Employee类inheritance自Person,所以我认为这是可能的。 谁能为我澄清一下这个? import java.io.*; import java.util.*; public class Payroll { private int monthlyPay, tax; private Person [] payroll = new Person [1]; //Method adds person to payroll array public void add(Person person) { if(payroll[0] == null) //If array is empty, fill first element with person { payroll[payroll.length-1] = person; } else //Creates copy of […]

不明确的java层次结构

我的问题是为什么下面的x.proc(z)打印57而不是打印39? class X { protected int v=0; public X() {v+=10; System.out.println(“constr X”);} public void proc(X p) {System.out.println(43);} } class Y extends X { public Y() {v+=5;System.out.println(“constr Y”);} public void proc(X p) {System.out.println(57);} public int getV() {return v;} } class Z extends Y { public Z() {v+=9;System.out.println(“constr Z”);} public void proc(Z p) {System.out.println(39);} } class Main […]

更正java.util.ResourceBundle组织

我有一个包含许多模块的国际化项目。 每个模块都有自己的一组包: – database-module + com_naugler_project_database.properties + com_naugler_project_database_fr.properties – mapping-module + com_naugler_project_mapping.properties + com_naugler_project_mapping_fr.properties 但是,许多国际化术语都是多余的(例如“确定”或“取消”),我希望将这些术语放在一个地方,以便于维护和开发。 我发现了ResourceBundleinheritance的这个有用的解释 ,但似乎一个(不是?)共同的祖先不会被正确国际化,因为: – common-module + com_naugler_project.properties + com_naugler_project_fr.properties <– this is not an ancestor – database-module + com_naugler_project_database.properties + com_naugler_project_database_fr.properties <– of this 我的捆绑组织是否会离开基地? 提供共同的国际化祖先的正确方法是什么?

方法不必要地被调用?

我有一个BaseActivity,可以通过其他所有活动进行扩展。 问题是,每当用户离开(onPause)活动时,我都会将音乐静音。 我也不再听电话了。 问题是,只要用户在活动之间切换,就会调用onPause ,这意味着应用程序不必要地静音并停止telephonymanager ,即使它只是静音并且如果用户要离开应用程序就停止telephonymanager : @Override protected void onPause() { Log.v(TAG, “IN onPause!”); // unregister phone listener to telephony manager tManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE); mute(); super.onPause(); } 现在说我在public class myClass extends BaseActivity之间切换public class myClass extends BaseActivity并切换到public class myOtherClass extends BaseActivity 。 这个开关不必要地执行onPause ,即使我只想在用户离开应用程序时调用onPause 。 我该怎么办? 感谢您的专家建议, 丰富