2017-04-27 71 views
0

考慮一個情景,當一個父類只有屬性和「沒有方法」和幾個子類正在擴展父類的代碼重用性。多態性是否適用於值對象?

這些對象本質上是值對象,如果在接受父變量的方法中傳入子值對象作爲輸入,當孩子沒有重載行爲時,仍然會將其稱爲多態行爲嗎?例如:

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

你這是什麼是指屬性?成員變量?如果是這樣,否,成員變量不是多態的。 –

+4

如果一棵樹落在森林中,但沒有人在這裏,它是否仍然發出聲音?我會說它的確如此。 –

+0

一些示例代碼會讓您更容易理解您的問題。 – lupz

回答

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

我會繼續說:「在編程語言和類型理論中,多態是爲不同類型實體提供單一接口。相同的界面,不同的類型。在編程語言理論中,我們應該理解通過'.'直接訪問成員作爲一個接口,不要與狹義的Java結構'interface'混淆。 – Persixty

+0

這是例子[B.Ali](http://stackoverflow.com/users/5761052/b-ali)應該已經開始。 – MockerTim

0

由於Parent類在您的文章沒有由子類重寫的方法然後dosomething在試驗方法做了不調用任何重寫的方法 - 如果是這樣的話那麼它是不多態性

相關問題