如何在父类中对子类使用不同的方法((没有枚举或任何属性))?

时间:2019-04-02 16:14:11

标签: java inheritance polymorphism

问题是我想要A的超类和三个子类B,C,D。 并且有一个方法仅超级类A具有,而所有子类都没有该方法,并且该方法在每个子类中具有不同的结果。 我也不能覆盖任何方法。 如何在不使用枚举或不给任何类赋予任何属性的情况下对此进行编码? 例如:

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

3 个答案:

答案 0 :(得分:0)

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

但是,如果您想在A类中拥有一个功能,则可以使用istanceof来验证该类

if(A的对象实例)doSomething ..

答案 1 :(得分:0)

您可以像这样使用泛型,但最好使用覆盖

 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]));
            }
        }
    }

答案 2 :(得分:0)

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());
    }
}
相关问题