ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (JAVA) 자바 상속 & 오버라이딩(Over riding)
    JAVA/컨셉 , 예제 2018. 8. 24. 13:52

    자바의 가장 중요한 특징 중 하나가 상속이다. 상속을 해주는 클래스를 super class, 받는 클래스를 sub class라 한다. 상속이 무엇인가 유산을 물려받음과 같이 자바에서는 super class로부터 메소드를 물려받아 사용할 수 있다. 이때 사용하는 키워드가 extends이다.

    다음 클래스에서 작성한 메소드는 start와 main 두개뿐이다. 리턴 타입 뒤에 해당 메소드가 작성되어 있는 클래스가 적혀 있다. 나머지 메소드들은 Object 클래스에서 작성되었다는 말이다. 

    quals 메소드에 ctrl 누르고 클릭해보면

    다음과 같이 메소드가 나온다. 스크롤을 맨 위로 올려보면

    Object 클래스가 나온다. 우리가 Object 클래스를 기본적으로 상속받아서 메소드들을 사용할 수 있는 것임을 기억하자.

    package blog.naver.com; public class Aircon extends AirCleaner { // 상속받는다. 확장한다는 의미가 더 가까움. // Aircon(sub class) 클래스가 AirCleaner(super class)에서 확장된다. /** * 냉방 설정 온도 */ private int temp = 30; /** * 전원 켬 */ @Override public void powerOn(){ System.out.println("에어컨을 켰다 시원하다."); cooling(); System.out.println("공기청정기 제조사 : "+ super.manufactor); System.out.println("공기청정기 제조국가 : " + super.origin); super.powerOn(); // AirCleaner의 powerOn 수행 } /** * 온도 낮추기 */ public void cooling(){ temp--; System.out.println("현재 온도 : " + temp + "도입니다"); } }

    Aircon 클래스

    package blog.naver.com; public class AirCleaner { public String manufactor = "휘센"; protected String origin = "한국"; private int power = 3; public void powerOn(){ System.out.println("공기청정기 가동해 공기가 맑아진다!"); } }

    AirCleaner 클래스

    package blog.naver.com; public class Room2 { public static void main(String[] args) { AirCleaner airCleaner = new Aircon(); // subclass is a superclass 서브클래스에 슈퍼 클래스 할당 // 상속 관계는 같은 데이터 타입으로 인식해 캐스팅 불필요. airCleaner.powerOn(); } }

    main 클래스


    결과는 다음과 같다. 

    subclass is a superclass
    상속 클래스를 사용하는 방법이라 생각하고 외울 것.
    subclass에 superclass를 할당한다.

    따라서 AirCleaner airCleaner = new Aircon(); 로 할당한 것이다.

    이와 반대로 super class is a sub class의 할당은 되지 않는다. 이는 데이터 매핑 관계가 한쪽으로만 정의되어 있기 때문이다. 싱글 리스트의 형태를 이루기 때문에 반대로의 참조가 불가능하다고 이해하고 넘어가도록 하자.
    해당 객체를 생성하면 Subclass의 메소드와 객체들을 우선적으로 사용한다고 생각하면 된다. super class의 메소드나 변수에는 super 키워드를 통해 접근할 수 있다. this와 같은 방식으로 super class의 메소드나 변수에 접근할 수 있다. this와 큰 차이점은 sub class와 super class 간 메소드명이 같을 수 있다는 것이다. 이때 기본적으로 sub class의 메소드가 호출된다. 따라서 sub class의 powerOn() 메소드가 호출되는 것이다. super class의 메소드를 호출하고 싶다면 super.메소드명 으로 호출해 사용하면 된다. 사용법은 Aircon 클래스의 powerOn 메소드 참조




Designed by Tistory.