추상 클래스


Animal이란 추상클래스

public abstract class JavaAnimal {
    
    protected final String species;
    protected final int legCount;
    
    public JavaAnimal(String species, int legCount) {
        this.species = species;
        this.legCount = legCount;
    }
    
    abstract public void move();

    public String getSpecies() {
        return species;
    }

    public int getLegCount() {
        return legCount;
    }
}
abstract class Animal(
    protected val species: String,
    protected open val legCount: Int
    ) {

    abstract fun move()
}

Animal을 상속한 Cat클래스

public class JavaCat extends JavaAnimal{

    public JavaCat(String species, int legCount) {
        super(species, 4);
    }

    @Override
    public void move() {
        System.out.println("고양이가 사뿐사뿐 걸어가~");
    }
}
class Cat(species: String): Animal(species, 4) {
    override fun move() {
        println("고양이가 사뿐사뿐 걸어가~")
    }
}

Animal을 상속한 Penguin클래스

public class JavaPenguin extends JavaAnimal{
    
    private final int wingCount;
    
    public JavaPenguin(String species) {
        super(species, 2);
        this.wingCount = 2;
    }
    
    @Override
    public void move() {
        System.out.println("펭귄이 움직입니다~ 펭펭");
    }

    @Override
    public int getLegCount() {
        return super.legCount + this.wingCount;
    }
}
class Penguin(species: String): Animal(species, 2) {
    
    private val wingCount: Int = 2
    
    override fun move() {
        println("펭귄이 움직입니다~ 펭펭")
    }
    
    override val legCount: Int
        get() = super.legCount + this.wingCount
}