//클래스 관계
정의 : 개체모델링을 통해서 추출된 클래스들간의 관계
종류 : 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(..)}
}
신고
Posted by 대절님

댓글을 달아 주세요



티스토리 툴바