Java

[Java] 상속과 오버라이딩

블로그 주인장 2023. 8. 8.

목차


    📢 상속

    • 기존 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것
    • (1) 부모 클래스 : 상속 대상이 되는 기존 클래스
    • (2) 자식 클래스 : 기존 클래스를 상속하는 클래스이다.
    • 부모 클래스의 필드와 메소드가 상속된다.(생성자와 초기화는 상속되지 않는다.)
    • 다중 상속은 불가능하다.
    • private이나 default 멤버는 자식 클래스에서 접근 불가하다!!
     
    //class (자식) extends (부모)
    class Cat extends Animal {
        String desc;
        
        //자식 클래스 함수 표현
        Cat() {
            super.desc = "고양이 입니다.";	//super 이용
            super("고양이 입니다.");			//super() 이용
        }
    }​

    📢 Super, Super()

    • super : 부모 클래스와 자식 클래스의 멤버 이름이 같을 때 구분하는 키워드이다.
    • super() : 부모 클래스의 생성자를 호출하는 것이다.
    class Animal {
        String desc;
        Animal() {
            this.desc = "동물 클래스 입니다.";
        }
    }
    class Cat extends Animal {
        String desc;
        Cat() {
           super.desc = "고양이 입니다.";		//super
           super("고양이 입니다.");			//super() 
        }
    }

    📢 오버라이딩

    • 부모 클래스의 메소드를 자식 클래스에서 재정의
    • 오버라이딩의 조건
    • (1). 메소드의 선언부는 부모 클래스의 메소드와 동일해야함.
    • (2). 반환 타입에 한해, 부모 클래스의 반환 타입으로 변환할 수 있는 타입으로 변경 가능
    • (3). 부모 클래스의 메소드보다 접근제어자를 더 좁은 범위로 변경 불가
    • (4). 부모 클래스의 메소드보다 더 큰 범위의 예외 선언은 불가하다.
    class Student2 extends Person{
        String name;
        int istdent;
    
        Student2(String name, int age, int istdent){
            this.name = name;
            this.age = age;
            this.istdent = istdent;
        }
        public void printInfo() {
            System.out.println("Student2.printInfo");
            System.out.println("name: " + name);
            System.out.println("age: " + age);
            System.out.println("istdent = " + istdent);
        }
    }
    
    public class Main {
    
        public static void main(String[] args) {
     		//오버라이딩
            System.out.println("=============");
            Student2 s2 = new Student2("b",32, 1);
            s2.printInfo();
        }
    }

     

    반응형

    'Java' 카테고리의 다른 글

    [Java] 다형성  (0) 2023.08.08
    [Java] 클래스와 객체(2)  (0) 2023.08.08
    [Java] 클래스와 객체(1)  (0) 2023.08.08

    댓글