多态性是否适用于值对象?

时间:2017-04-27 07:45:24

标签: java oop object-oriented-analysis

考虑一个场景,当父类只有属性和“无方法”,并且有几个子类正在扩展父类以获得代码重用性。

这些对象本质上是值对象,如果在接受父变量作为输入的方法中传递子值对象,当子没有要覆盖的行为时,您仍然会将其称为多态行为吗?例如:

class Parent { int value = 100; /* doesn't have any method to be overriden */ }

class Child1 extends Parent {};

class Child2 extends Parent {};

public class Test {

    public static void main(String[] args) {
        Parent obj1 = new Child1();
        doSomething(obj1);

        Parent obj2 = new Child2();
        doSomething(obj2);

        Child1 obj3 = new Child1();
        doSomething(obj3);

        Child2 obj4 = new Child2();
        doSomething(obj4);
    }

    static void doSomething(Parent p) {
        // some code
    }
}

即使根本没有行为,你仍然会在多态行为之上调用吗?

2 个答案:

答案 0 :(得分:2)

你的意思是这样吗?

class A { int foobar = 42; }
class B extends A {}

public class Test3 {
    public static void printAsFoobarValue(A a) { System.out.println(a.foobar); }
    public static void printBsFoobarValue(B b) { System.out.println(b.foobar); }

    public static void main(String[ ] args) throws Exception {
        A a = new A();
        B b = new B();
        A c = new B();
        printAsFoobarValue(a);
        printAsFoobarValue(b);
        printAsFoobarValue(c);
        printBsFoobarValue(b);
    }
}

我称之为多态。

答案 1 :(得分:0)

由于帖子中的Parent类没有子类覆盖的方法,因此Test中的dosomething方法执行的操作不会调用任何重写方法 - 如果是这种情况则不是多态性