2017-04-27 10 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 
    } 
} 

당신은 여전히 ​​전혀 행동이없는 경우에도 다형성 (polymorphic) 위의 호출 것인가?

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

이 polymorph를 호출합니다. 게시물에 Parent 클래스는 서브 클래스에 의해 오버라이드 (override) 할 방법이없는

+1

"프로그래밍 언어 및 유형 이론에서 다형성은 다른 유형의 엔티티에 단일 인터페이스를 제공하는 것"이라고 생각합니다. 동일한 인터페이스, 다른 유형. 프로그래밍 언어 이론에서 우리는 더 좁은 자바 구조'인터페이스'와 혼동하지 말아야하는 인터페이스로서'.'을 통해 멤버들에게 직접적으로 접근하는 것을 이해해야한다. – Persixty

+0

이것은 [B.Ali] (http://stackoverflow.com/users/5761052/b-ali)이 시작된 예입니다. – MockerTim

0

때문에 다음 dosomething 시험의 메소드는 오버라이드 (override) 메소드를 호출하지 않습니다 뭔가 않습니다 - 이러한 경우 다음이 아닌 다형성