Java - 상속(extends), 접근제어자, 추상클래스

yuns·2022년 10월 3일
0

Java

목록 보기
8/16
post-thumbnail

상속

클래스는 다른 클래스에게 상속받을 수 있다.
상속 받을 시, 부모 클래스의 타입을 사용할 수 있다.

class Animal {
    String name;

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

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

class Dog extends Animal {
    Dog(String name) {
        this.name = name;
    }

    public void swim() {
        System.out.println(name + "is swimming");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("초코");
        dog.cry();
        dog.swim();
        Animal dog2 = new Animal();
        dog2.name = "강쥐";
        dog2.cry();
//        doc2.swim(); 불가능!!
    }
}

접근제어자

멤버 변수/함수나 클래스에 사용되어 외부에서의 접근을 제한한다.
private -> default -> protected -> public
private : 같은 클래스 내에서 접근 가능
default : 같은 패키지 내에서 접근 가능
protected : 같은 패키지 내에서, 다른 패키지의 자손 클래스에서 접근 가능
public : 접근 제한 없음.

super : 내가 상속받은 부모 클래스를 가리키는 키워드


추상클래스

추상클래스는 객체화 할 수 없다.

추상메소드 바디 { } 를 가질 수 없다.

abstract class Bird {
    private int x, y, z;

    void fly(int x, int y, int z) {
        printlocation();
        System.out.println("이동합니다.");
        this.x = x;
        this.y = y;

        if (flyable(z)) {
            this.z = z;
        } else {
            System.out.println("그 높이로는 날 수 없습니다.");
        }

        printlocation();
    }

    abstract boolean flyable(int z);

    public void printlocation() {
        System.out.println("현재 위치는 : " + x + "," + y + "," + z);
    }
}

class Pigeon extends Bird {

    @Override
    boolean flyable(int z) {
        return z < 10000;
    }
}

class Peacock extends Bird {

    @Override
    boolean flyable(int z) {
        return false;
    }
}

public class Main {
    public static void main(String[] args) {
//        Bird b1 = new Bird();
        Bird pigeon = new Pigeon();
        Bird peacock = new Peacock();

        System.out.println("비둘기 ::::");
        pigeon.fly(1, 1, 3);
        System.out.println("공작새::::");
        peacock.fly(1, 1, 3);
        System.out.println("비둘기 ::::");
        pigeon.fly(3, 3, 20000);

    }
}

0개의 댓글