可以在Java中声明一个类或另一个类的对象吗?
我是新手。我任务的一部分是询问用户他们的来电属于哪两类 类CategoryA和类CategoryB都是从我们在上一个赋值中进行的类PhoneCall继承的 我想这样做:可以在Java中声明一个类或另一个类的对象吗?,java,inheritance,Java,Inheritance,我是新手。我任务的一部分是询问用户他们的来电属于哪两类 类CategoryA和类CategoryB都是从我们在上一个赋值中进行的类PhoneCall继承的 我想这样做: String choice = null; System.out.printf("Please enter a 'A' for Category A%n"); System.out.printf("Please enter a 'B' for Category B%n"); //[Input v
String choice = null;
System.out.printf("Please enter a 'A' for Category A%n");
System.out.printf("Please enter a 'B' for Category B%n");
//[Input validation/exception handling stuff goes here]
switch(choice){
case "A":
CategoryA objectName = new CategoryA();
break;
case "B":
CategoryB objectName = new CategoryB();
break;
}
但这当然行不通,因为
程序的其余部分使用objectName。如果我必须有两个不同的对象名,那么每次我都必须使用一个If/else语句或switch语句,对吗?我甚至无法将对象传递给函数,因为它属于一个类或另一个类。这里有我缺少的解决方案吗?是的,编程到公共
电话呼叫
界面
然而,我认为用一个简单的if-else-if
like阅读上面的内容会更容易
PhoneCall phoneCall = null;
if ("A".equals(choice)) {
phoneCall = new CategoryA();
} else if ("B".equals(choice)) {
phoneCall = new CategoryB();
}
是,编程到公共
电话呼叫
界面
然而,我认为用一个简单的if-else-if
like阅读上面的内容会更容易
PhoneCall phoneCall = null;
if ("A".equals(choice)) {
phoneCall = new CategoryA();
} else if ("B".equals(choice)) {
phoneCall = new CategoryB();
}
所以你想要使用的是一种叫做多态性的东西。这是当您声明父类(或接口)的对象时,但将其初始化为子类 例如,如果您有一个带有子类B和C的接口A,则执行以下操作:
InterfaceA obj;
if(x){
obj = new ClassB(parameters);
} else {
obj = new ClassC(parameters);
}
将创建B类或C类。
因为它们列在父类下,所以只能调用父类拥有的方法。换句话说,如果类B具有唯一的方法,则不能调用该方法,除非将对象强制转换为该类型:
ClassB objB = (ClassB) obj;
objB.uniqueMethod();
但是,如果obj不是ClassB,则会抛出一个错误,因此您首先需要检查obj是否是ClassB:
if(obj instanceOf ClassB){
ClassB objB = (ClassB) obj;
objB.uniqueMethod();
}
这样,您就可以确保在执行obj之前可以将obj强制转换为ClassB
这适用于接口或类。因此,您要使用的是所谓的多态性。这是当您声明父类(或接口)的对象时,但将其初始化为子类 例如,如果您有一个带有子类B和C的接口A,则执行以下操作:
InterfaceA obj;
if(x){
obj = new ClassB(parameters);
} else {
obj = new ClassC(parameters);
}
将创建B类或C类。
因为它们列在父类下,所以只能调用父类拥有的方法。换句话说,如果类B具有唯一的方法,则不能调用该方法,除非将对象强制转换为该类型:
ClassB objB = (ClassB) obj;
objB.uniqueMethod();
但是,如果obj不是ClassB,则会抛出一个错误,因此您首先需要检查obj是否是ClassB:
if(obj instanceOf ClassB){
ClassB objB = (ClassB) obj;
objB.uniqueMethod();
}
这样,您就可以确保在执行obj之前可以将obj强制转换为ClassB
这适用于接口或类。当我这样做时,对于每个类特定的方法,会出现“无法解析方法”错误。我做错了什么?没有创建可以通过公共接口调用的方法。当我这样做时,对于每个类特定的方法,会出现“无法解析方法”错误。我做错了什么?没有创建可以通过公共接口调用的方法。我要补充的是,您可以(可能应该)在强制转换之前使用
if(objB instanceof ClassB)
。我要补充的是,您可以(可能应该)在强制转换之前使用if(objB instanceof ClassB)
。