【发布时间】:2018-05-10 08:14:36
【问题描述】:
我有多个类,每个类都实现了多个不同的方法。现在问题陈述是我希望在另一个类文件中使用所有这些方法(可能大约 200 个这样的不同类文件/方法),其中所有不同的方法都来自上述类文件。
我想如果我实现了一个列出了所有这些不同方法的接口,那么我只需调用/导入/引用该单个接口并可以使用所有方法吗?但我被困住了,因为这个解决方案似乎不起作用。
与上述工作相反(即单个类实现 2 个接口:http://tutorials.jenkov.com/java/interfaces.html)。希望检查单个接口是否可以使用多个类,而无需声明接口内引用的每个类中的所有方法的开销?
作为一个例子:有没有什么方法可以在同一个接口中实现 2 个不同的类,而每个类都没有抽象类?好像这个类是抽象的,那么我无法在下面的示例“应用程序”类中使用它的方法:
Common commonClass = new ABC_FamilyGivenName();
如果 ABC_FamilyGivenName 类是抽象类,则不允许上述情况。
INTERFACE:
public interface Common {
void ABC_GivenNames();
void ABC_FamilyNames();
void ABC_Gender();
void ABC_BirthDay();
}
IMPLEMENTATION CLASSES:
public class ABC_FamilyGivenName extends Base implements Common {
public void ABC_GivenNames(){
// Implementation code
}
public void ABC_FamilyNames(){
// Implementation code
}
}
public class ABC_DOBGender extends Base implements Common {
public void ABC_Gender(){
// Implementation code
}
public void ABC_BirthDay(){
// Implementation code
}
}
USE IMPLEMENTED CLASS:
public class Application extends Base {
Common commonClass = new ABC_FamilyGivenName();
/* DO I NEED THIS? I THINK I DO, BUT CODE/JAVA SAYS I DO NOT
* Common commonClass = new ABC_DOBGender();
*/
public void ELP_C0050_PassportDetails(){
commonClass.ABC_GivenNames();
commonClass.ABC_FamilyNames();
commonClass.ABC_DOB();
commonClass.ABC_Gender();
}
}
我有 2 个名为 ABC_FamilyGivenName 和 ABC_DOBGender 的课程。 我已经创建了一个接口 Common。
我想在另一个名为 Application 的类中使用上述两个类中的方法。
在当前的实现中,Java 希望我在 ABC_FamilyGivenName 和 ABC_DOBGender 中都添加一个 @Override:
IMPLEMENTATION CLASSES:
public class ABC_FamilyGivenName extends Base implements Common {
public void ABC_GivenNames(){
// Implementation code
}
public void ABC_FamilyNames(){
// Implementation code
}
@Override
public void ABC_BirthDay() {}
@Override
public void ABC_Gender() {}
}
public class ABC_DOBGender extends Base implements Common {
public void ABC_Gender(){
// Implementation code
}
public void ABC_BirthDay(){
// Implementation code
}
@Override
public void ABC_GivenName() { }
@Override
public void ABC_FamilyName() { }
}
我可以避免上述@Override 并且只使用第一个示例中给出的没有这些的类吗?
【问题讨论】:
-
不,你不能。正确的方法可能是将您的界面分成两个单独的界面,并使用您确实需要的方法。
-
如果您使用的是 java 8,请将所有方法设为默认方法,并在子类上覆盖所需的方法。
-
@SomeJavaGuy 我不希望有多个接口,因为这违背了目的,我宁愿直接使用该类。对我来说,我有大约 200 个这样的类,每个“应用程序”类型的类每次都会使用大约 20-30 个。我希望避免为我使用的每个类尝试导入/声明语句的开销,并希望使用一个;我认为可以通过使用界面来实现,但似乎并非如此。
-
@Saran 你能解释一下吗?
-
也可以在以下位置找到解决方案:stackoverflow.com/questions/47523700/…
标签: java class interface overriding