추상클래스란?
인터페이스의 역할도 하면서 클래스의 기능도 가지고 있는 클래스.
'abstract' 키워드를 사용해 선언해야 함
인터페이스와 추상 클래스의 차이
유사한 기능을 가지고 있으나, 추상 클래스는 일반 클래스처럼 객체변수, 생성자, private 메서드 등을 가질 수 있음
그러나 다중 상속은 불가능함!
추상클래스 사용 예
abstract class Predator extends Animal {
abstract String getFood();
void printFood() {
Systehttp://m.out.printf("my food is %s\n", getFood());
}
static int LEG_COUNT = 4;
static int speed() {
return LEG_COUNT * 30;
}
}
interface Barkable {
void bark();
}
class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
class Tiger extends Predator implements Barkable {
public String getFood() {
return "apple";
}
public void bark(){
System.out.println("어흥");
}
}
class Lion extends Predator implements Barkable {
public String getFood() {
return "banana";
}
public void bark() {
System.out.println("으르렁");
}
}
class Zookeeper {
void feed(Predator predator){
System.out.println("feed "+ predator.getFood());
}
}
class Bouncer {
void barkAnimal(Barkable animal) {
animal.bark();
}
}
public class Day17 {
public static void main(String[] args) {
Zookeeper zookeeper = new Zookeeper();
Tiger tiger = new Tiger();
Lion lion = new Lion();
tiger.printFood();
zookeeper.feed(tiger); //feed apple 출력
System.out.println();
lion.printFood();
zookeeper.feed(lion); // feed banana 출력
System.out.println();
Predator.speed();
System.out.println(Predator.LEG_COUNT);
System.out.println();
Bouncer bouncer = new Bouncer();
tiger.bark();
zookeeper.feed(tiger);
lion.bark();
bouncer.barkAnimal(tiger);
}
}