Archive

Java Day 12 상속

|

Java Day 12 상속


  1. 상속

    • 클래스간의 기능을 확장이전 함으로서 코드의 중복을 줄여주고 유지보수성이 증대됨
    • 기본클래스(Base Class), 부모클래스(Parent Class), 상위클래스(Super Class) - 주는쪽
    • 유도클래스(Derivation Class), 자식클래스(Child Class), 하위클래스(Sub Class) - 받는쪽
    • 자바에서는 다중상속을 허용하지 않는다
    • 자식클래스는 extends 예약어를 사용하여 상속을 받음


  2. super() 생성자

    • 자식클래스가 생성될 때 눈에는 보이지 않지만 메모리상으로는 부모를 먼저 생성한 후 상속을 받아 생성된다. 따라서, 자식클래스는 부모 생성자를 호출함
    • 아무것도 적지 않아도 사실 자식 클래스의 생성자의 첫줄에 super();가 생략되어있는것
    • 만약 부모클래스의 기본생성자가 매개변수를 받는 경우 자식클래스의 super() 생성자도 같은 자료형의 매개변수를 받아야 컴파일오류가 안난다
    public class Human{
        public Human(int age){
            System.out.println(age);
        }
    }
    public class Women extends Human{
        public Women(){
            super(30); //super(); 매개변수 안받으면 compile error
        }
    }
    public class SuperEx{
        public static void main(String[] args){
            Women me = new Women(); //30 출력, 부모클래스의 생성자가 호출됨
        }
    }
    


  3. 오버라이드(Override)

    • 상위클래스의 메소드를 하위클래스에서 재정의
    • 오버로드(Overload)와 헷갈리니 주의, 오버로드는 하나의 클래스에서 같은 이름의 메소드 혹은 생성자를 인자,자료형 다르게 해서 재사용하는것
    • 오버라이딩은 부모의 메소드와 이름, 매개변수, 리턴타입이 같아야한다
    • 접근제한은 더 넓게만 가능하다 ex) 부모 : protected = 자식 : protected, public
    • 윗줄에 명시적으로 @Override 표기를 해주는 것이 좋다
    class CellPhone{
        public void cell(){
            System.out.println("음성 통화");
        }
    }
    public class SmartPhone extends CellPhone{
        @Override
        public void cell(){
            super.cell(); //부모 메소드 호출
            System.out.println("영상 통화");
        }
    }
        public static void main(String[] args){
                SmartPhone sp = new SmartPhone();
                sp.cell();
    }//음성통화, 영상통화 출력
    


  4. final 클래스, final 메소드

    • final 지정어가 붙은 클래스는 자식클래스에서 상속이 불가능하다 ex) String class..
    • final 지정어가 붙은 메소드는 자식클래스에서 오버라이딩 할 수 없다


  5. protected 접근제한자

    • protected가 붙은 메소드, 멤버, 생성자는 같은 패키지면 접근이 가능하지만 다른 패키지에서 접근하려면 해당 클래스를 상속받은 후 사용해야한다



참고 자료


이것이자바다

자바프로그래밍100% 실전가이드

KG아이티뱅크 자바 강의자료