我的代码有问题。我有一个祖父母班,一个抽象父母班,有非抽象的孩子
public class GrandParent () {
// codes here
}
public abstract class Parent1 extends GrandParent () {
// codes here
}
public class A extends Parent1 () {
// codes here
}
public class B extends Parent1 () {
// codes here
}
我还有另外一堂课,在那里我放所有东西。我创建了一个祖父母类的数组列表,其中包含父类的孩子。当我尝试使用instanceof时,它给了我一个错误,我不明白为什么。父类是Granparent的子类,但是为什么会发生错误?
public class Main () {
ArrayList <GrandParent> gps;
public Main () {
gps = new ArrayList<> ();
gps.add(new A());
gps.add(new B());
}
public void method () {
if(gps.get(0) instanceof Parent1) { // in here i get an error that says inconvertible types; cannot cast GrandParent to java.util.Parent1
//codes
}
答案 0 :(得分:0)
这里似乎有一些问题。首先,类Main
中的主要方法必须为public static void main (String[] args)
。这就是Java对main
方法的期望。然后ArrayList
必须是静态的,否则,如果在类级别定义了main
,则不能引用它。另外,您可以在method()
方法中定义gps,然后将其作为参数传递给()
。
还要注意,您将instanceof
放在班级名称之后。那是不对的。仅方法应具有参数列表。
现在代码处于可以解决任何其他问题的状态。请记住,A
应该能够转换为父类型来进行检查。父类型是否抽象并不重要。这无关紧要。因此,没有理由为什么它不能检查B
和Parent1
是否为Parent1
类型。 public class Main {
public static void main (String [] args)
{
GrandParent baz = new A();
GrandParent biz = new B();
if (baz instanceof Parent1)
System.out.println("hi");
if (biz instanceof Parent1)
System.out.println("hi again");
}
}
是否抽象并不重要。为了证明这一点,请看下面的小例子。
ArrayList
如果运行此命令,则没有错误,并且输出“ hi”和“ hi hi”都被打印。这类似于代码中发生的事情,因为GrandParent
gps中的元素是对A
和B
类型的对象的import java.util.ArrayList;
class GrandParent {
// codes here
}
abstract class Parent1 extends GrandParent {
// codes here
}
class A extends Parent1 {
// codes here
}
class B extends Parent1 {
// codes here
}
public class Main {
public static ArrayList<GrandParent> gps;
public static void main (String [] args) {
gps = new ArrayList<>();
gps.add(new A());
gps.add(new B());
}
public static void method () {
if(gps.get(0) instanceof Parent1) { // in here i get an error that says inconvertible types; cannot cast GrandParent to java.util.Parent1
{
//Codes here
}
}
}
}
引用。
这是应用了更正的代码。请注意,每个类都在其自己的文件中,因为它们都是公共类:
def __init__(self, make, model, year, color, kilometers, pre_owned, price):
cars.append(self)
但是还有另一件事。从软件设计的角度来看,让代码依赖类型检查不是一个好主意。换句话说,程序的行为不应取决于显式检查此类的类型。最好在类本身中定义该行为。例如,您可以覆盖子类中的方法以定义与其祖先不同的行为。同样,您可以在类中提供接口的实现。请注意,这两种方法都不要求显式类型检查。