//클래스 관계
정의 : 개체모델링을 통해서 추출된 클래스들간의 관계
종류 : Is a : 대학생 is a 학생, 관리자 is a 직원 ( 상속 )
Has a : 자동차 has a 엔진, 은행고객 has a 계좌
Use a : 프로그래머 use a 컴퓨터
//상속(Inheritance)
정의 : Is a 관계가 성립되는 클래스들간의 관계
특정 클래스가 가지는 일부 속성과 기능을 다른 새로운 클래스에게 제공하기 위해 맺는 클래들간의 관계
용도 : 비슷한 용도의 클래스들을 재사용 할 목적으로 상속을 한다.
하나 이상의 클래스 사이에서 구조나 행위를 공유할 목적.
형식 : class sub클래스명 extends super클래스명{ ... }
특징 : 단일상속만 지원(계층구조 명확)
부모의 멤버를 자식은 객체생성 없이 재사용가능(부모에서 private로 지정하면 자식이 사용불가)
생성자는 상속되지 않는다.
상속관계로 만드는 법 :
-일반화 : 다수의 클래스들간의 공통점을 발견하는법(공통점을 가진 클래스를 부모, 차이점을 가진 클래스를 자식으로) 대학생, 고등학생 -> 학생
-전문화 : 일반화하고 반대로 특정클래스에서 하위 클래스를 생성 직원 -> 관리자, 엔지니어, 비서
장점 : 객체의 재사용성, 코드의 간결함에따른 개발시간 단축
public class Student{
private String name;
private int grade;
public Student(){ }
public String getName(){ return name; }
public int getGrade(){ return grade; }
public String getInfo(){ return "이름은 " + name + " 학년은 " + grade;}}
public class College extends Student{
private int unit;
public College(String n, int g, int u){ name=n; grade=g; unit=g; }
public int getUnit(){ return unit; }}
public class Middle extends Student{
public Middle(String n, int g){ name=n; grade=g; }}
public class TestStudent{
public static void main(String[] args){
College c = new College("대철",3,20);
syso(c.getInfo() + "학점 " + c.getUnit());
}}
College 객체 생성 - Student 부모생성자 호출 - 부모먼저 생성 - 자식생성자에서 super(); 로 자동호출
//super
정의 : 부모클래스의 인스턴스를 가리키는 변수
용도 : 부모클래스의 접근시 사용
- 부모생성자 호출
자식생성자 첫라인에서 부모생성자를 호출함. 명시 호출않으면 super(); 가 자동으로 삽입.
- 부모 클래스 멤버 호출
자식클래스에서 부모 클래스의 멤버를 호출. super.name;, super.getName();
//this
정의 : 자기자신의 인스턴스를 가리키는 변수
용도 : 자신의 멤버 호출시 사용.
- 다른 생성자 호출
생성자 첫라인에서 다른 생성자를 호출함. this();, this([argument]);
- 자신의 멤버 호출
로컬변수와 인스턴스변수 이름이 동일한경우 this.멤버
//overriding메서드
정의 : 상속관계시 부모의 메서드를 자식이 수정하여 재정의한 메서드
규칙 :
메서드이름이 동일
리턴 타입이 동일
argument_list가 동일 (순서, 타입, 개수)
접근지정자는 확대만 가능(축소불가)
Exception(예외)처리는 축소만 가능(확대 불가)
static, final, private은 overriding이 불가능하다.
용도 : 자식클래스에서 추가작업이 필요한경우 수정해서 사용.
//접근제한자
정의 : 클래스의 멤버에 대해서 제한된 방식으로 접근하도록 제어를 지정할때 사용하는 지정자.
public > protected > default > private
public : 모든클래스에서 접근이 가능
protected : 같은 패키지에 있는 클래스와 상속관계의 클래스들만 접근가능
default : 같은 패키지에 있는 클래스만 접근가능
private : 같은 클래스내에서만 접근가능
사용법 : 클래스(public, default만 가능), 로컬변수 사용X
//다형성
정의 : 특정타입의 변수가 특정타입이 아닌 다른 타입도 가리킬수 있는 능력
특징 : 반드시 상속이 전제, 재사용성이 높아짐, 형변환가 instanceof연산자가 주로사용됨
형식 : 상위타입 변수 = 하위타입;
용도 : 메서드 argument에 사용되어짐.
예제 : Student s = new College("대철",3,20);
sout(s.getUnit());
sout(s.getInfo());
#error 컴파일에러
//형변환
College c = (College)s
sout(c.getUnit());
예제 :
public void getTest(Student s){ ... }
psvm{
College c = new College("대철",3,20);
Middle m = new Middle();
c.getTest(c);
m.getTest(m);
-instanceof적용예제
public void getTest(Student s){
if(s instanceof College){ sout(..)}
if(s instanceof Middle){ sout(..)}
}
정의 : 개체모델링을 통해서 추출된 클래스들간의 관계
종류 : Is a : 대학생 is a 학생, 관리자 is a 직원 ( 상속 )
Has a : 자동차 has a 엔진, 은행고객 has a 계좌
Use a : 프로그래머 use a 컴퓨터
//상속(Inheritance)
정의 : Is a 관계가 성립되는 클래스들간의 관계
특정 클래스가 가지는 일부 속성과 기능을 다른 새로운 클래스에게 제공하기 위해 맺는 클래들간의 관계
용도 : 비슷한 용도의 클래스들을 재사용 할 목적으로 상속을 한다.
하나 이상의 클래스 사이에서 구조나 행위를 공유할 목적.
형식 : class sub클래스명 extends super클래스명{ ... }
특징 : 단일상속만 지원(계층구조 명확)
부모의 멤버를 자식은 객체생성 없이 재사용가능(부모에서 private로 지정하면 자식이 사용불가)
생성자는 상속되지 않는다.
상속관계로 만드는 법 :
-일반화 : 다수의 클래스들간의 공통점을 발견하는법(공통점을 가진 클래스를 부모, 차이점을 가진 클래스를 자식으로) 대학생, 고등학생 -> 학생
-전문화 : 일반화하고 반대로 특정클래스에서 하위 클래스를 생성 직원 -> 관리자, 엔지니어, 비서
장점 : 객체의 재사용성, 코드의 간결함에따른 개발시간 단축
public class Student{
private String name;
private int grade;
public Student(){ }
public String getName(){ return name; }
public int getGrade(){ return grade; }
public String getInfo(){ return "이름은 " + name + " 학년은 " + grade;}}
public class College extends Student{
private int unit;
public College(String n, int g, int u){ name=n; grade=g; unit=g; }
public int getUnit(){ return unit; }}
public class Middle extends Student{
public Middle(String n, int g){ name=n; grade=g; }}
public class TestStudent{
public static void main(String[] args){
College c = new College("대철",3,20);
syso(c.getInfo() + "학점 " + c.getUnit());
}}
College 객체 생성 - Student 부모생성자 호출 - 부모먼저 생성 - 자식생성자에서 super(); 로 자동호출
//super
정의 : 부모클래스의 인스턴스를 가리키는 변수
용도 : 부모클래스의 접근시 사용
- 부모생성자 호출
자식생성자 첫라인에서 부모생성자를 호출함. 명시 호출않으면 super(); 가 자동으로 삽입.
- 부모 클래스 멤버 호출
자식클래스에서 부모 클래스의 멤버를 호출. super.name;, super.getName();
//this
정의 : 자기자신의 인스턴스를 가리키는 변수
용도 : 자신의 멤버 호출시 사용.
- 다른 생성자 호출
생성자 첫라인에서 다른 생성자를 호출함. this();, this([argument]);
- 자신의 멤버 호출
로컬변수와 인스턴스변수 이름이 동일한경우 this.멤버
//overriding메서드
정의 : 상속관계시 부모의 메서드를 자식이 수정하여 재정의한 메서드
규칙 :
메서드이름이 동일
리턴 타입이 동일
argument_list가 동일 (순서, 타입, 개수)
접근지정자는 확대만 가능(축소불가)
Exception(예외)처리는 축소만 가능(확대 불가)
static, final, private은 overriding이 불가능하다.
용도 : 자식클래스에서 추가작업이 필요한경우 수정해서 사용.
//접근제한자
정의 : 클래스의 멤버에 대해서 제한된 방식으로 접근하도록 제어를 지정할때 사용하는 지정자.
public > protected > default > private
public : 모든클래스에서 접근이 가능
protected : 같은 패키지에 있는 클래스와 상속관계의 클래스들만 접근가능
default : 같은 패키지에 있는 클래스만 접근가능
private : 같은 클래스내에서만 접근가능
사용법 : 클래스(public, default만 가능), 로컬변수 사용X
//다형성
정의 : 특정타입의 변수가 특정타입이 아닌 다른 타입도 가리킬수 있는 능력
특징 : 반드시 상속이 전제, 재사용성이 높아짐, 형변환가 instanceof연산자가 주로사용됨
형식 : 상위타입 변수 = 하위타입;
용도 : 메서드 argument에 사용되어짐.
예제 : Student s = new College("대철",3,20);
sout(s.getUnit());
sout(s.getInfo());
#error 컴파일에러
//형변환
College c = (College)s
sout(c.getUnit());
예제 :
public void getTest(Student s){ ... }
psvm{
College c = new College("대철",3,20);
Middle m = new Middle();
c.getTest(c);
m.getTest(m);
-instanceof적용예제
public void getTest(Student s){
if(s instanceof College){ sout(..)}
if(s instanceof Middle){ sout(..)}
}
'study' 카테고리의 다른 글
스터디 07/11-2(Exception) (0) | 2009.07.03 |
---|---|
스터디 07/11-1 (Object, wrapper, StringBuffer, StringTokenizer) (0) | 2009.07.03 |
자바 문법요약 (0) | 2009.07.02 |
스터디 07/04-3(static, singleton, interface, 내부클래스) (0) | 2009.07.02 |
스터디 07/04-2(클래스 관계, 상속, 다형성..) (0) | 2009.07.02 |
스터디 07/04-1(JAVA 클래스, 생성자..) (0) | 2009.07.02 |
댓글을 달아 주세요