블로그 이미지
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. 23. 15:37 도브의 프로그래밍/Java

상속
코딩시간 단축, 에러 최소화

extends        클래스 이름
자바 키워드   상속할클래스 이름
기존에 있는 메소드를 이용하여 정의 한다.

String은 레퍼런스타입으로 클래스타입이다. 그래서 대문자로 시작

String 클래스에 있는 equals 메소드 = 선언된 String이 가지고 있는 문자열과 문자열을 비교
ex) if (!cardNo.equals(this.cardNo)
! = not
|| = or

exeption
try{}
catch(Exception e){
//e = type
String msg = e.getMessage();
//Exception 클래스에 e라는 변수


슈퍼클래스, 부모클래스
브클래스, 자식클래스

생성자가 있는 클래스의 상속
-자바 컴파일러는 생성자 안의 첫번째 명령문이 슈퍼클래스의 생성자 호출문이 아니면 자동으로 슈퍼클래스의 파라미터 없는 생성자(no-arg constructor) 호출문을 추가 한다.

this() 내 클래스에서 다른 생성자를 부를때

부모클래스의 생성자를 호출할때는 super를 사용한다.
super(accountNo, ownerName, balance, 매개변수);

메소드 오버로딩
클래스 안에서 동일한 이름을 가진 메소드 여러개를 정의 할수 있음
하지만 이 메소드는 서로 다른 것으로 인식 함(매개변수의 수와 종류

메소드 오버라이딩
속관계에 있는 클래스에서
부모 클래스에서 정의 되어있는 메소드를 자식 클래스에서 다시 정의를 한다.

부모클래스의 메소드를 자식메소드의 구미에 맞게 재정의 한다. = 메소드 오버라이딩
-> 이름은 동일하지만 서로 다른 기능, 다른 객체(?)가 된다.

부모클래스 메소드를 그대로 가져 와스 쓰지 못하니
자식 클래스에서 재정의 하겠다.

부모, 자식 클래스의동일한 메소드, 호출
super.deposit(amoount);

this() = 같은 클래스 안에서 동일한 이름이나 다른 메소드 호출
super() = 부모, 자식 상속관계 메소드에서 자식 생성자 메소드에서 부모 생성자 메소드를 부를때
this. = 동일한 클래스 내에서 클래스 속성이나 메소드의 매겨변수, 이름이 동일할때 두개를 구별하기 위해 씀
super. = 부모, 자식 상속관계에 있는 두 쿨래스에서 부모 클래스에 있는 속성or 메소드를 부르기 위해

ex) 하나의 알고리즘이 변형되었을때 이 알고리즘을 사용하는 클래스가 100개라면
일일이 바꿔주기보다
하나의 중심 클래스를 통해 상속하면
한번만 바꿔주면 된다.

final 키워드를 추가 한 클래스
- 상속을 금지하는 키워드
final class Account

메소드 오버라이딩을 금지하는 final 키워드
더 이상 오버라이딩 시킬수 없다.
final int withdraw(int amount(

인스턴스화를 금지하는 abstract 키워드 - 추상화, 생략?
abstract class Account
abstract int withdraw
->이 클래스는 객체를 생성할 수 없다. 아직 구체적으로 생성되지 않았따.
메소드 시그네쳐 (리턴타입 이름 매개변수)
abstract 메소드는 메소드 시그네쳐만 구현한다.
내부 구현이 되지 않고 틀만 만든다.

추상메소드(abstract method):  메소드 본체가 없는 메소드
추상 메소드가 필요한 경우

추상 메소드 = abstract 키워드가 꼭 들어가야 하며
{} 중괄호가 사용되지 않아야한다.
ex ) Student();


각 클래스중에

공통된 메소드를 부모 클래스에 추상화 메소드로 정의한다.
속성 부분도 공통된 부분을 부모 클래스 속성에 정의

혼자서 프로그래밍 할때는 불필요할수 있으나
대형 프로젝트, 여러명이 할때

초기 구조를 설계 할때( 클래스 구조 설계) 틀을 만들어 주고 (추상화 클래스)
각 부서에서 알아서 구현
각 부서간 통신을 위해 인터페이스 매개변수 정보 등은 통일한다.
호출할때 규격화된 방법으로 메소드를 호출한다.

abstract void sendMessage(String recipient);
본체 대신 세미클론을 써야 함. {} -> ;
메소드 선언 != 정의
선언 = 메소드의 시그네쳐만 만들어 놓은것
정의 = {메소드의 알고리즘}

정의 = 콘크리트 메세지 구현

추상 클래스는 추상메소드를 하나 이상 포함한다(?)

추상 클래스를 상속받은 하위 클래스에서는 반드시 추상 메소드 본체를 구현 해 줘야한다.
안그러면 하위 클래스도 추상 클래스가 되어 버린다.







일반적인 클래스는 concreat 콘크리트 클래스 (구체화된 클래스)
->객체를 이 클래스로부터 생성할 수 있다.











posted by DovewinG