혼자공부 - 22.10.19(자바 복습)

자라나는 ㅇㅅㅇ개발자·2022년 11월 19일
0

응애나애기개발자

목록 보기
4/5

클래스 상속

class Animal{                                       // 동물 이라는 부모 클래스
    String name;

    public void cry(){
        System.out.println(name + " is crying");     // Animal class에 cry 이라는 메소드
    }
}

class Dog extends Animal{                           // Animal 이라는 부모 클래스에 상속되는 자식 클래스 생성
    Dog(String name){
        this.name = name;
    }
    public void swim(){
        System.out.println(name + " is swimming");   // Dog class에 swim 이라는 메소드
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("코코");                // 생성자로 Dog 클래스에 dog = "코코" 라는 인스턴스를 생성
        dog.cry();                                  // dog class에 있는 함수들을 호출. cry는 부모클래스꺼니까 쓸수있다
        dog.swim();

        Animal dog2 = new Dog("미미");            // 생성자로 Animal 클래스에 dog2 = "미미" 라는 인스턴스를 생성
        dog2.cry();
        // dog2.swim();                                 // Animal 클래스는 swim을 가지고있지 않으므로 실행 에러
    }
}

코코 is crying
코코 is swimming
미미 is crying


오버로딩(overloading)

  • 한 클래스 내에서 동일한 이름의 메소드를 여러 개 갖는 것
  • 이름이 같다고 모드 오버로딩이 아니다
    1. 메소드 이름이 동일해야 한다.
    2. 매개 변수의 개수나 type이 달라야 한다.

오버라이딩(overriding)

  • 부모 클래스에서 상속받은 method를 똑같이 자식 class에 정의하는 것(함수의 이름을 같게)
  • 부모 클래스에 있던 원래 함수의 내용은 사라진다.
class Animal{
    String name;
    String color;

    public Animal(String name) {
        this.name = name;
    }

    public void cry(){
        System.out.println(name + " is crying");
    }
}

class Dog extends Animal{
    public Dog(String name) {
        super(name);
    }

    public void cry(){
        System.out.println(name + " is barking");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog("코코");
        dog.cry();
    }
}

코코 is barking
: 부모 클래스의 cry함수는 override되어서 자식 클래스의 cry가 실행되므로 barking이 나온다.


접근 제어자

  • 멤버 변수/함수 혹은 클래스의 앞에 붙어서 사용되며
    외부에서의 접근을 제한하는 역할을 한다.
  • 접근 제어자의 종류
    private : 같은 클래스 내에서만 접근이 가능, 외부 클래스에서 사용할 수 없다.
    default(nothing) : 같은 패키지 내에서만 접근이 가능하다. 아무것도 선언하지 않은 경우
    protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능하다.
    public : 접근 제한이 없다.

추상 클래스

  • 추상 메소드를 선언할 수 있는 클래스를 의미
  • 상속받는 자식 클래스 없으면 인스턴스를 생성할 수 없다.
  • 추상 메소드는 중괄호 안에 구현체가 없는 것을 뜻함
    자식클래스에서 구현해야한다.

0개의 댓글