다형성 연습
UML - word
package : wordprocessorTest
class : WordUser
package : wordprocessor.word
class : Word
package : wordprocessor.format
class : Format
AstaFormat
EqulFormat
SharpFormat
------
package wordprocessorTest;
import wordprocessor.format.AstaFormat;
import wordprocessor.format.Format;
import wordprocessor.format.SharpFormat;
import wordprocessor.word.Word;
public class WordUser {
public static void main(String[] args) {
Word word = new Word();
Format f = new Format();
AstaFormat af = new AstaFormat();
SharpFormat sf = new SharpFormat();
word.print("출력할 내용 : Hello",f);
word.print("출력할 내용 : Hello",af);
word.print("출력할 내용 : Hello",sf);
}
}
----------
package wordprocessor.word;
import wordprocessor.format.Format;
public class Word {
public void print(String message, Format format){
System.out.println(format.getFormat(message));
}
}
----------
package wordprocessor.format;
public class Format {
public String getFormat(String message){
String str;
str = "---------------------\n"+message+"\n---------------------";
return str;
}
}
----------
package wordprocessor.format;
public class AstaFormat extends Format{
@Override
public String getFormat(String message) {
// TODO Auto-generated method stub
return super.getFormat(message).replace('-','*');
}
}
------------
package wordprocessor.format;
public class EqulFormat extends Format{
@Override
public String getFormat(String message) {
// TODO Auto-generated method stub
return super.getFormat(message).replace('-', '=');
}
}
-------------
package wordprocessor.format;
public class SharpFormat extends Format{
@Override
public String getFormat(String message) {
// TODO Auto-generated method stub
return super.getFormat(message).replace('-', '#');
}
}
-----------------------------------------------------------------------------------
=====================================================================================================
* 2012-3-16
* 다형성 - 부모tyoe 변수 - 자식객체 (compile시점에 되는 경우는 상속인 경우 부모가 자식보다 더 큰 tyoe이면 다형성이 된다) , 실행시점에서는 부모의 객체와 자식의 객체가 둘다 생성되서 접근가능.
-> 부모에 정의된 메소드만 호출가능.
- Super s = new Super();
s.a();(o)자식에 있는 a()를 호출
s.b();(x)자식에는 b()가 있지만 부모에 없어서 컴파일 시점에서 에러가 난다.
Super Sub
----- <------- ------
a() a()
b()
- 배열 Heterogeneous -> reference type의 배열.
* Super = new Super() c : o
Sub1 sub = (Sub1)s; R : x
* Sub1 sub1 = new Sub1(); C : X (컴파일시점)
Sub2 sub2 = (Sub2)sub1; R : X (실행시점)
* Super s = new Super(); C : O
Sub1 s1 = (Sub1)s; R : O
'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글
인터페이스(interface) (0) | 2012.07.28 |
---|---|
추상화(abstract) (0) | 2012.07.28 |
다형성(polymorephism) (0) | 2012.07.28 |
의존관계(dependency) (0) | 2012.07.28 |
final변수 (0) | 2012.07.28 |