6장 클래스(상속)
클래스 상속 클래스 상속 메서드 오버로딩 메서드 오버라이딩 접근 제어자 Vector 클래스 (Method Overloading : 메서드 중복 정의) 메서드 오버라이딩 (Method Overriding : 메서드 재정의) 접근 제어자 Vector 클래스
클래스 클래스 상속 두 클래스가 상속관계에 있을 때 상속되는 클래스를 부모 클래스 혹은 상위 클래스라 부르고 상속 받는 클래스를 자녀 클래스 혹은 하위 클래스라 부른다. 하위 클래스는 상위 클래스의 public, protected로 선언된 멤버(변수, 메서드)들을 상속받아 사용하거나 재정의 할 수 있다. 상속을 할 때는 extends 지시자를 사용한다. [접근 제어자] class 클래스 이름 extends 상위 클래스 { 멤버 변수; 생성자; 멤버 메서드; }
클래스 예제
클래스 this 와 super super 지시자는 상위 클래스의 멤버 변수나 메서드에 접근할 때 사용한다. super 지사자의 경우 오버라이딩이 되어 있지 않다면 생략될 수 있고 this 지시자는 일반적으로 생략이 되지만 메서드 내부에서 멤버변수와 동일한 이름의 식별자를 사용할 경우 this 지시자를 해야만 사용된 변수가 멤버 변수임을 컴파일러가 알 수 있다.
클래스 메서드 오버로딩(overloading) 같은 이름의 메서드를 중복해서 정의하는 것을 말한다. public int sum(int intNum1, int intNum2) { int result = intNum1 + intNum2; System.out.println("int형 인자를 받는 메서드 호출"); System.out.println(intNum1 + " + " + intNum2 + " = " + result); return result; } public long sum(long longNum1, long longNum2) { .... public double sum(double doubleNum1, double doubleNum2) { ... Calculator cal = new Calculator(); int intResult = cal.sum(10, 20); long longResult = cal.sum(10L, 20L); double doubleResult = cal.sum(10.0, 20.0);
클래스 메서드 오버라이딩(overriding) 상위 클래스의 메서드를 개선하거나 하위 클래스에 맞게 변경하여 사용해야 할 때 메서드 오버라이딩을 사용하게 된다. 메서드 오버라이딩을 하면 메서드가 호출되었을 때 상위 클래스의 메서드가 아닌 하위 클래스의 메서드를 호출한다. 상위 클래스의 메서드를 호출하기 위해서는 super 지시자를 사용하여 호출한다.
오버라이딩 된 메서드에서 변경가능한 접근제어자 클래스 메서드 오버라이딩 규칙 상위 메서드의 이름, 인자, 반환형이 완전히 같아야 한다. 접근 제어의 변경은 다음과 같은 경우만 허용된다. static, final, private으로 정의된 메서드는 오버라이딩 할 수 없다. 상위 클래스의 메서드 접근 제어자 오버라이딩 된 메서드에서 변경가능한 접근제어자 public protected private
클래스 예제 class Human { public void speak() { System.out.println("말하다."); } } class Korean extends Human { System.out.println("한국어로 말하다."); class American extends Human { System.out.println("영어로 말하다.");
클래스 접근제어자 어떤 접근 제어자를 쓰는가에 따라 클래스의 멤버에 접근할 수 있는 권한이 틀려진다. private - 메서드나 멤버 변수에 클래스의 외부에서 접근 할 수 없다. protected - 상속받은 클래스나 같은 패키지에 있는 클래스에서 접근가능하하다. public - 아무런 제약 없이 접근 가능하다. 접근 제어자가 없는 경우는 같은 패키지 내에서 접근가능하다.
클래스 Vector 클래스 리스트 자료 구조를 제공한다. Vector 클래스는 java.util 패키지에 정의되어 있다. 데이터가 가득 차면 자동으로 크기가 늘어나며 프로그래머가 임의로 크기를 조절 할 수 있다. 배열은 인덱스를 통한 접근만을 허용하지만 Vector는 Enumeration 인터페이스와 인덱스를 이용해 접근할 수 있다.
클래스 Vector 클래스 생성자 Vector 객체에 요소 추가하기 Vector 객체에서 요소 제거하기 void add(Object obj) Vector 객체에서 요소 제거하기 Objcet remove(int index) Vector 객체에서 저장된 객체 가져오기 Object get(int index)와 int size() 메서드를 사용한다. get 메서드를 사용해 가져온 객체는 캐스팅(형변환)을 하여 사용한다. for(int i=0 ; i < vec.size() ; i++) { Object obj = vec.get(i); } 생성자 설명 Vector() 크기가 10인 Vector 클래스 객체를 만들고 가득차면 10만큼 크기를 증가시킨다. Vector(int initialCapacity) initialCapacity만큼의 크기를 가지는 Vector 클래스 객체를 만들고 가득차면 initialCapacity만큼 증가시킨다. Vector(int initialCapacity, int capacityIncrement) initialCapacity만큼의 크기를 가지는 Vector 클래스 객체를 만들고 가득차면 capacityIncrement만큼 크기를 증가시킨다.