ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [java] 상속
    java 2023. 1. 16. 23:52
    상속이란 ? : 자식클래스가 부모클래스의 기능을 그대로 물려받는 것.

    클래스 상속을 위해서는 extends 키워드를 사용한다.

    class Animal{
        String name;
    
        void setName(String name) {
            this.name = name;
        }
    }
    class Dog extends Animal{
        //Animal클래스를 상속하는 Dog클래스
    }
    public class Sample {
        public static void main(String[] args) {
            Dog dog = new Dog();
            dog.setName("poppy"); //dog클래스는 name객체변수와 setName메소드가 없지만, Animal클래스를 상속했기때문에 사용이가능
            System.out.println(dog.name);
    
        }
    }
    
    

    부모 클래스의 기능을 확장

    부모 클래스를 상속받은 자식 클래스는 부모클래스의 기능에 더하여 좀더 많은 기능을 가질 수도 있다.

    class Animal{
        String name;
    
        void setName(String name) {
            this.name = name;
        }
    }
    class Dog extends Animal{
        void sleep(){
            System.out.println(this.name + "zzz");
            //Animal클래스보다 더많은 기능(sleep메소드가)추가되었다.
        }
    }
    public class Sample {
        public static void main(String[] args) {
            Dog dog = new Dog();
            dog.setName("poppy");
            System.out.println(dog.name);
            dog.sleep();
    
        }
    }
    
    

     

    IS-A관계

    Dog클래스는 Animal클래스를 상속했다. 이런 경우 Dog is Animal이라고 할 수 있는데 이런관계를 IS-A관계라 한다.

     

    자동타입변환

    상속관계에 있을때 자식클래스의 객체는 부모 클래스의 자료형인 것처럼 사용할 수 있다.

    Animal dog = new Dog(); //자동타입변환

    자식타입인 Dog객체를 부모타입인 Animal자료형으로 변환된 이후에는(자동타입변환),

    부모클래스에 선언된 필드와 메소드에만 접근이 가능하다.

    그러나 메소드가 자식클래스에서 재정의되었다면 자식 클래스의 메소드가 대신 호출된다.

     

    메소드 오버라이딩(메소드 재정의)

    부모클래스의 메소드를 자식클래스가 동일한 형태로 또다시 구현해 내는 행위를 메소드 오버라이딩이라고 한다.

    메소드 오버라이딩을 하게 되면 자식클래스의 재정의된 메소드가 부모클래스의 메소드보다 우선순위로 호출된다.

    class Animal{
        String name;
    
        void setName(String name) {
            this.name = name;
        }
    }
    class Dog extends Animal{
        void sleep(){
            System.out.println(this.name + "zzz");
            
        }
    }
    class HouseDog extends Dog{ //메소드 오버라이딩
        void sleep(){
            System.out.println(this.name + "zzz in house");
        }
    }
    public class Sample {
        public static void main(String[] args) {
            HouseDog houseDog = new HouseDog();
            houseDog.setName("happy");
            houseDog.sleep(); // happy zzz in house 출력
    
        }
    }
    
    

    HouseDog class 의 sleep메소드가 Dog클래스의 sleep메소드보다 더 높은 우선수위를 갖게되어 HouseDog의 클래스의 sleep메소드가 호출된다.

    메소드 오버로딩

    메소드 변경이 아닌 추가이다. 동일한 이름이지만 입력항목이 다른 메소드를 만드는걸 메소드 오버로딩이라고 한다.

    class Animal{
        String name;
    
        void setName(String name) {
            this.name = name;
        }
    }
    class Dog extends Animal{
        void sleep(){
            System.out.println(this.name + "zzz");
    
        }
    }
    class HouseDog extends Dog{ //메소드 오버라이딩
        void sleep() {
            System.out.println(this.name + "zzz in house");}
        void sleep(int hour){//메소드 오버로딩
                System.out.println(this.name + "zzz in house" + hour + "hours");
            }
        }
    public class Sample {
        public static void main(String[] args) {
            HouseDog houseDog = new HouseDog();
            houseDog.setName("happy");
            houseDog.sleep(); // happy zzz in house 출력
            houseDog.sleep(3); //hapy zzz in house 3 hours출력
    
        }
    }
    
    

    다중상속

    다중상속은 클래스가 동시에 하나 이상의 클래스를 상속받는 것을 뜻한다. 하지만 자바는 다중상속을 지원하지않는다.

     

     

     

     

    https://wikidocs.net/book/31

    'java' 카테고리의 다른 글

    [java] 인터페이스  (0) 2023.01.17
    [java] 생성자(Constructor)  (0) 2023.01.17
    [java] call by value vs call by reference  (0) 2023.01.16
    [java] 메소드  (0) 2023.01.16
    [java] 클래스  (0) 2023.01.16

    댓글

lee-ding