상속, 위임

sungyeon_park·2024년 4월 6일
0

상속

implements를 통해 부모 클래스(Animal)의 정보를 자식 클래스(Dog)이 가져온다.
이를 통해 자식 클래스는 부모클래스의 속성(private 이외의 속성)과 메소드를 사용할 수 있다.

  • private 타입은 같은 클래스 내에서만 사용할 수 있다.
    상속받은 클래스에서도 사용이 불가능하다.
  • protected 타입은 같은 패키지의 클래스 내에서 사용할 수 있다.
    상속받은 클래스라면 사용할 수 있다.
  • public 타입은 어떤 클래스에서도 사용할 수 있다.
    다른 패키지라면 패키지를 import해야 사용할 수 있다.
  • default 타입은 접근 제어자를 별도로 설정하지 않은 타입이다.
    변수나 메서드는 default 접근 제어자가 자동으로 설정된다.
    동일한 패키지 안에서만 접근이 가능하다.

* 다른 패키지의 클래스를 사용하기 위해서는 패키지를 import 해야한다.

상속을 통해 다른 패키지의 protected 속성(변수) 사용하기

자식 클래스

package house.person;  // 패키지가 서로 다르다.

import house.HousePark;

public class EungYongPark extends HousePark {  // HousePark을 상속했다.
    public static void main(String[] args) {
        EungYongPark eyp = new EungYongPark();
        System.out.println(eyp.lastname);  // 상속한 클래스의 protected 변수는 접근이 가능하다.
    }
}

부모 클래스

package house;

public class HousePark {
    protected String lastname = "park";
}

protected 메소드 상속

// 다른 패키지의 AnotherClass
package vvvvv;

import sssss.ParentClass;
public class AnotherClass extends ParentClass {
        public static void main(String[] args){
        AnotherClass child = new AnotherClass();
        child.protectedMethod(); // 같은 패키지 내에서 protected 메서드 접근 가능
        }
    @Override
    protected void protectedMethod() {
        super.protectedMethod();
    }
}

package sssss;
    //다른 패키지의 ParentClass
    public class ParentClass {
        protected void protectedMethod() {
            System.out.println("This is a protected method.");
        }
    }

상속

class Animal {

    public void eat() {
        System.out.println("밥먹기");
    }

    public void move() {
        System.out.println("움직이기");
    }
}

class Dog extends Animal {}

public class Main {
    public static void main(String[] args) {
    Dog dog = new Dog();
	dog.move();
	dog.eat();
    }

위임

public class MyController {

    MyRepository myRepository;

    public void save() {
        //MemoryRepository에게 save 권한을 위임
        myRepository = new MemoryRepository();
        myRepository.save();
       
        //JpaRepository에게 save 권한을 위임
        myRepository = new JpaRepository에게();
        myRepository.save();
    }
}

코드 출처:
https://sorjfkrh5078.tistory.com/282
https://wikidocs.net/232

profile
박성연

0개의 댓글