블로그 이미지
DovewinG
사랑합니다~                   

calendar

1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Notice

2010. 11. 30. 15:45 도브의 프로그래밍/Java

추상 클래스를 상속 받으면
하위 클래스는 추상 클래스에 있는 메소드는 다 구현 해야한다.

객체 지향의 꽃
다형성 폴리모포즘
한가지의 형태가 여러가지에 쓰일수 있다.

ex)
TOP DOWN 방식
Account 클래스

CheckingAccount 클래스  CreditLineAccount클래스
상속을 통해 만들어진 클래스는 슈퍼 클래스와 비슷한 양상을 띕니다.

CheckingAccount 객체, Account 객체, CreditLineAccount 객체

슈퍼클래스 변수에는 서브클래스 객체를 대입할 수 있습니다.

Account 클래스 와 CheckingAccount 클래스의 객체와 연관이 있다. -> 다형성

Account acc = new Account()
acc라는 변수에 Account라는 데이터타입에 대입할수 있는 타입(구조)를 생성

Account acc = new CreditAccount()

CreditAccount()에 의해 생성된 객체가 acc에 들어간다.

Account (슈퍼클래스) CreditAccount(서브클래스)
서브 클래스는 슈퍼클래스의 구조를 모두 포함하고 있다.

서브 객체(다수의 데이터량 - 부모클래스 데이터+자신의 데이터) 를 부모의 레퍼런스 타입의 변수 acc에 넣는다?

큰 데이터를 -> 작은 틀에 넣는다.

int a = 3.2 -> a에는 3만 저장된다.   0.2는 버려짐

CreditAccount()의 객체를 acc에 집어 넣으면
부모 클래스에서 정의 해 놓은 속성과 메소드까지만 접근 가능

--------   
Account                
--------
account
balance
name
--------
withdraw()
deposite()
--------

상속받은
--------------
CreditAccount
--------------
credit
--------------
creditwithdraw()
---------------

Account obj;
obj = new Account("11","ggg",100);
obj new CheckingAccount(444","hhh", 30, "0000");

static void printAccountInfo(Account obj)
Account 객체의 obj의 매개변수로 받겠다.
다양한 타입의 객체를 한 타입의 파라미터 변수로 받는다.


printAccountInfo(obj2);

상속관계(inheritance) 클래스 -> is a 관계 (ISA)
SubClass is a SuperClass
CreditLine Class is an Account Class

서브클래스는 수퍼클래스의 기능(?)을 대신할 수 있지만
수퍼클래스는 서브클래스를 대신할 수 없다.

다형성과 메소드 오버라이딩


스태팃 바인딩 - 코드만 보고 어느 메소드를 호출할것인지 보인다.
컴파일할때 결정됨

late 바인딩, 다이나믹 바인딩

어느 객체가 들어가는지에 따라 바뀐다.

커뮤니케이션이 서로 다른 두 객체가 서로 커뮤니케이션 할수 있도록 해 주는 것이 인터페이스(일반적인 개념)

자바의 인터페이스

일반 클래스
abstract 클래스
인터페이스

자바에서는 클래스의 다중 상속을 허용하지 않는다.

다중상속 - 여러 부모클래스로부터 한 자식클래스가 상속받는다.
다중상속의 장점을 넣기 위해 나온것 - 인터페이스


인터페이스 - 추상 메소드처럼 메소드 시그네쳐(메소드이름,매개변수정보)만 구현한다.
ex) interface Lendable{
abstract void checkOut( String borrower, String date);
abstract void checkIn();
}
인터페이스의 특징
인터페이스 - 추상 메소드처럼 메소드 시그네쳐(메소드이름,매개변수정보)만 구현한다.
인터페이스는 객체 생성 불가
인터페이스에서 정의된 속성은 모두 static final 이 적용되어 상수화 된다.

인터페이스는 공통된 속성을 추출할수 없기때문에 기능(메소드)만 정의 한다.
클래스 상속 - extend
인터페이스로 공통 메소드로 추출할때
implements(구현함) 키워드 씀

메소드 이름은 동사형태로 이름을 만든다. 속성은 명사형태
인터페이스에서 메소드를 정의 할때 public 붙어야한다.
public은 메소드를 오픈하여 모든곳에서 쓸수 있게 한다.

extends 절과 implements 절이 모두 있는 클래스의 선언 방법
extends CDInfo (하나만 가능) implements Lendable, ddd, aaa (여러개 가능)

인터페이스를 가지고 할 수 있는 일
클래스의 선언 방법을 제한할 수 있다.
-> 클래스 안에서 구현해야할 메소드를 지정할수 있다.
인터페이스 변수 선언에 사용됨

Lendable obj;

인터페이스 자체는 객체를 생성할수 없지만
인터페이스 클래스를 상속한 클래스에서 객체를 만들어 인터페이스 클래스에 집어넣을순 있따.(다형성)










posted by DovewinG