考虑一个场景,当父类只有属性和“无方法”,并且有几个子类正在扩展父类以获得代码重用性。
这些对象本质上是值对象,如果在接受父变量作为输入的方法中传递子值对象,当子没有要覆盖的行为时,您仍然会将其称为多态行为吗?例如:
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
}
}
即使根本没有行为,你仍然会在多态行为之上调用吗?
答案 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
方法执行的操作不会调用任何重写方法 - 如果是这种情况则不是多态性