Java 对于子类((没有枚举或任何属性)),如何在超类中以不同的方式使用方法?

Java 对于子类((没有枚举或任何属性)),如何在超类中以不同的方式使用方法?,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,问题是我想要一个由a和三个子类组成的超类,B,C,D。 这里有一个方法,只有超类a有,并且没有子类有这个方法,这个方法在每个子类中有不同的结果。 我也不能覆盖任何方法。 如何在不使用enum或为任何类提供任何属性的情况下编写此代码? 例如: public class { public String method1(){ //what each class type should do } } public class B extends{ } public static void mai

问题是我想要一个由a和三个子类组成的超类,B,C,D。 这里有一个方法,只有超类a有,并且没有子类有这个方法,这个方法在每个子类中有不同的结果。 我也不能覆盖任何方法。 如何在不使用enum或为任何类提供任何属性的情况下编写此代码? 例如:

public class {
 public String method1(){
  //what each class type should do
 }
}
public class B extends{
}
public static void main(String[] args) {
   A[] elements = {new A(),new B()};
    for (int i = 0; i < elements.length; i++) {
        System.out.println(elements[i].method1());
 }
}
结果例如: A1
B1

我认为方法重写是最好的解决方案

但是,如果希望在类A中有一个函数,可以使用istanceof来验证该类


如果目标不是剂量测量

您可以像这样使用泛型,但最好使用重写

 public class A {
        public <T extends A> String method1(T classInstance) {
            return method(classInstance);
       }

       private String method(A classInstance) {
            return classInstance.toString();
       }

       private String method(B classInstance) {
            return classInstance.toString();
       } 
}



 public class B extends A{
 }

 public class Application {
        public static void main(String[] args) {
            A[] elements = {new A (), new B ()};
            for (int i = 0; i < elements.length; i++)
            {
                System.out.println (elements[i].method1(elements[i]));
            }
        }
    }

方法重写?为什么不能在每个子类中重写method1。如果不能做到这一点,则必须重写该方法或传递枚举或参数。我不能在任何子类(如b)中编写任何方法。能否解释如何使用INSTACEOF来标识b.Method?b.Method将调用类A方法。然后它将检查对象b的类型,它是b的一个实例。因此,既然b instanceof b是真的,它将执行特定于类Bi的代码,希望这能回答您的问题
class A {
  public String method1() {
        if(this instanceof B) {
          return "Class B";
          //do something for class B
        } else if (this instanceof C) {
          return "Class C";
          //do something for class C
        }
        return "";
    }
}
class B extends A { }
class C extends A { }
public class Main {
    public static void main(String[] args) {
        A[] elements = {new A(),new B()};
        for (int i = 0; i < elements.length; i++)
            System.out.println(elements[i].method1());
    }
}