-
자바개념3 (상속)학교 수업/자바프로그래밍 2020. 4. 16. 21:35
자바의 상속
- 자바는 하나의 클래스만을 상속받는 단일 상속만 가능
(다중 상속일 경우, 메소드 출처의 모호성 문제 때문에)
- 상속을 통해 기존해 작성된 클래스 재활용 가능하고,
클래스 간 계층적 관계를 구성함으로써 다형성 문법적 토대 마련
코드 예시
1234567891011121314151617181920class Parent {private int a = 10; // private 필드public int b = 20; // public 필드}class Child extends Parent {public int c = 30; // public 필드void display() {// System.out.println(a); // 상속받은 private 필드 참조, 오류 발생System.out.println(b); // 상속받은 public 필드 참조System.out.println(c); // 자식 클래스에서 선언한 public 필드 참조}}public class Inheritance01 {public static void main(String[] args) {Child ch = new Child();ch.display();}}cs 클래스를 통한 다중 상속은 지원하지 않지만,
인터페이스 라는 것을 이용해 다중 상속은 할 수 있다.
인터페이스(interface) ?
- 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매니저 역할 까지 담당하는 일종의 추상 클래스
주의점
자바의 추상클래스는 생성자, 필드, 일반메소드, 추상메소드를 포함할수 있지만
인터페이스는 추상메소드와 상수만 포함 가능하다.
- 선언 문법
접근제어자 interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
...
public abstract 메소드이름(매개변수목록);
...
}
인터페이스의 모든 필드는 상수만 가능하니깐 public static final이어야 하며,
모든 메소드는 추상 메소드만 가능하니깐 public abstract이어야 한다.
접근제어자는 생략이 가능하며, 생략 시 컴파일 할때 자바 컴파일러가 자동으로 default로 정해서 추가해줌.
- 클래스가 인터페이스 상속받는 문법
class 클래스이름 implements 인터페이스이름 { ... }
class 클래스이름 extend 상위클래스이름 implements 인터페이스이름 { ... } //상속과 동시도 가능
- 코드 예시
123456789101112131415161718192021222324252627282930313233interface Animal { public abstract void cry(); }interface Pet { public abstract void play(); }class Cat implements Animal, Pet {public void cry() {System.out.println("냐옹냐옹!");}public void play() {System.out.println("쥐 잡기 놀이하자~!");}}class Dog implements Animal, Pet {public void cry() {System.out.println("멍멍!");}public void play() {System.out.println("산책가자~!");}}public class Polymorphism04 {public static void main(String[] args) {Cat c = new Cat();Dog d = new Dog();c.cry();c.play();d.cry();d.play();}}cs '학교 수업 > 자바프로그래밍' 카테고리의 다른 글
자바 개념 6(thread) (0) 2020.04.23 자바 개념 5(socket programming의 바탕 TCP/IP) (0) 2020.04.23 자바 개념 4 (입출력) (0) 2020.04.18 자바 개념2 (클래스, 필드, 메소드, 제어자) (0) 2020.04.16 자바 개념 (0) 2020.04.16