티스토리 뷰
1. 다형성
부 모= 자식 ;
▷ 다형성 - 다양한 상태(모양)
▷ 하나의 이름에 대하여 여러가지 설정을 담고 있는 상태
"다양하다"
▷ 메서드가 상속을 하다보면 여러개의 기능으로 재정의 될 수 있다.
▷ 한 이름에 여러개의 재정의된 메서드를 사용하고 싶을 때 다형성이라는 문법을 적용하면 된다.
--> 자식 재정의 메서드가 호출된다
( 재정의를 해놓지 않았으면.. 그냥 부모가 호출하면 된다 )
#실습
package polyex;
class Phone{
void call(){
System.out.println("전화를 걸다");
}
}
class Phone2G extends Phone{
void call(){
super.call();
System.out.println("단축번호 기능을 이용해서 전화를 걸다 (자식)");
}
}
class Phone3G extends Phone2G{
void call(){
super.call();
System.out.println("화상전화 기능을 이용해서 전화를 걸다 ");
}
}
public class PolyTest {
public static void main(String[] args) {
Phone3G p3=new Phone3G();
p3.call();
//25-->14-->15-->8-->9-->3-->4(문장 출력)-->5-->9->10(문장 출력)-->11-->15-->16(문장 출력)-->17-->25
}
}
#실습
▷ 상속에 있어서 대입 여부
▷ 자식 < 부모
▷ Phone(제일 큰 부모) > P2G > P3G
▷ 크다 = 어떤 자식이 오든 대입할 수 있다 라는 의미 (대입할 수 있다)
▷ 자식 ≠부모 (대입할 수 없다)
▷ 다양한 형태가 대입될수 있는 성질 => 다형(타입)성
▷ 다형적 대입 : 부모는 자식 인스턴스(객체)를 대입 받을 수 있다
package polyex;
class Phone2{
void call(){
System.out.println("전화를 걸다");
}
}
class Phone2G2 extends Phone2{
void call(){
super.call();
System.out.println("단축번호 기능을 이용해서 전화를 걸다 (자식)");
}
}
class Phone3G2 extends Phone2G2{
void call(){
super.call();
System.out.println("화상전화 기능을 이용해서 전화를 걸다(자식2) ");
}
}
public class PolyTest2 {
public static void main(String[] args) {
Phone2 phone2 = null; //아직 인스턴스를 연결시키지 않았다.
phone2 = new Phone2(); //자기 자신의 인스턴스가 올 수 있다.
phone2.call(); //자기 인스턴스가 메서드 실행한다. "전화를 걸다" 가 호출!
//왜? 인스턴스가 Phone2 이므로!!
//자식 인스턴스를 대입시킬 수 있다 : 다형성
phone2 = new Phone2G2();
phone2.call(); //상황이 달라진다. 똑같은 메서드 호출이지만
//다른 내용이 나온다. "자식 인스턴스 타입으로 나온다"
phone2 = new Phone3G2();
phone2.call(); //자식인스턴스 타입으로 나옴
}
}
※ 메서드가 상속을 하다보면 여러개의 기능으로 재정의 될 수 있다.
▷ 한 이름에 여러개의 재정의된 메서드를 사용하고 싶을 때
▷ 다형성이라는 문법을 적용하면 된다.
*추상클래스
- 클래스를 추상화 시켜 놓는다 추상화 <--> 구체화
- 구체적이지 않다 - 직접적으로 사용할 수 없는 상태
- 추상적인 개념, 관념적이다
- 클래스 들을 하나로 묶어주는 구심점(카테고리) 역할을 수행시킨다
- 실채화(구체화) 시킬 순 없다 == new 라는 인스턴스를 붙일 수 없다
"에러!'
객체는 만들 수 있다
ex)
추상 클래스 tv 가 있을 때
new TV(); 에러
TV tv; 객체는 허용을 한다
tv = new TV() 에러 인스턴스를 못만들어서 에러다
TV 는 다른 클래스(자식)들을 위해서 존재한다
class Lcd extends TV{} --> Lcd 클래스를 만들 떄 TV클래스가 도와준다
tv= new Lcd() 가 대입될 수 있게 된다(0)
추상 클래스 객체는 자식 인스턴스를 받을 수 있다
- 다른 클래스를 도와주기 위해서 만드는 것
(helper )
- 다형성에 기반이 된다
#실습
package modulex;
public class TV {
private String type;
public void tvInfo(){
System.out.println("tv입니다");
}
}
package modulex;
public class ColorTV extends TV{
@Override // 재정의
public void tvInfo(){
System.out.println("color"+"TV입니다");
}
}
package modulex;
public class Lcd extends TV {
@Override // 재정의
public void tvInfo(){
System.out.println("Lcd"+"TV입니다");
}
}
package modulex;
public class Led extends TV{
@Override // 재정의
public void tvInfo(){
System.out.println("Led"+"TV입니다");
}
}
package polyex;
import modulex.ColorTV;
import modulex.Lcd;
import modulex.Led;
import modulex.TV;
public class PolyTest3 {
static void choiceTv(TV tv){
tv.tvInfo();
}
public static void main(String[] args) {
TV tv = new TV();
tv.tvInfo();
Lcd lcd = new Lcd();
Led led = new Led();
ColorTV cT= new ColorTV();
choiceTv(led);
choiceTv(lcd);
choiceTv(cT);
}
}
|
|
// 재정의 안한 상태
package modelex;
public class Uhd extends TV {
}
choiceTv(new Uhd());// 재정의 안한 상태 ->"그냥 부모거 호출한다"
# 실습 (과제 중 )
'Programing > Java' 카테고리의 다른 글
Java2 - 02. 패키지 Object- toString (0) | 2017.05.11 |
---|---|
Java2 - 01. 예외처리 (0) | 2017.05.10 |
Java1 - 21. 재정의(override) (0) | 2017.05.10 |
Java1 - 20. Inheritance(상속) (0) | 2017.05.04 |
Java1 - 19. Static (0) | 2017.05.02 |