헬린코린이
[JAVA] 추상클래스 본문
추상 클래스에 대해 알아보겠다.
추상 클래스란 쉽게 말해 추상 메서드를 가지고 있는 클래스이다.
abstract 키워드로 선언된 불완전한 클래스를 말하고. 추상 클래스는 인스턴스화 할 수는 없으나,
추상 클래스를 상속받는 자식 클래스의 인스턴스화는 가능합니다.
추상 클래스를 선언하는 방법은 다음과 같습니다.
abstract class A{ };
일반적인 클래스 앞에 abstract키워드만 붙여주면 된다 이로써 이 클래스는 추상 클래스가 되었다.
추상 메서드도 마찬가지로 abstract 키워드로 선언된 메서드를 말합니다. 추상 메서드는 {}가 없습니다. 코드를 보겠습니다.
abstract class A{
abstract void hello();
}
class B extends A{ }
이 클래스를 상속한 class B가 있다고 하자
이 class B는 반드시 추상 메서드를 구현해야 한다.
이게 추상 메서드와 일반 메서드의 차이점이다
일반 메서드를 상속받은 자식 클래스는 메서드를 구현해도 되고 안 해도 되지만
추상 클래스를 상속받은 자식 클래스는 반드시 메서드를 구현해야 한다.
즉 오버 라이딩을 강제하고 있습니다.
그리고 추상 클래스는 추상 메서드를 포함하고 있다는 점을 제외하면, 일반 클래스와 모든 점이 같습니다.
즉, 생성자와 필드, 일반 메서드도 포함할 수 있습니다.
public class Test03 {
public static void main(String[] args) {
Dog d1 = new Dog("초코",2);
Cat c1 = new Cat("나르",4);
System.out.println(d1);
d1.hello();
System.out.println(c1);
c1.hello();
d1.eat();
}
}
abstract class Animal{
// 추상메서드를 클래스가 가지려면,
// 반드시 추상클래스여야만한다.!
String species;
String name;
int age;
abstract void hello();
void eat() {
System.out.println("냠냠");
}
void sleep() {
System.out.println("zzzz");
}
Animal(String species, String name, int age ){
this.species = species;
this.name=name;
this.age = age;
}
@Override
public String toString() {
return this.species+" "+this.name+"는 "+this.age+"살";
}
}
class Dog extends Animal {
Dog(String name, int age){
super("강아지", name, age);
}
@Override
void hello() {
System.out.println("멍멍");
}
}
class Cat extends Animal{
Cat(String name, int age){
super("고양이", name, age);
}
@Override
void hello() {
System.out.println("야옹");
}
}
간단한 추상 클래스를 이용한 코드이다. 이해하는데 어렵지 않을 것이다.
Comments