티스토리 뷰
Tip and Error/JAVA
추상 클래스(abstract class) & 템플릿 메서드(final)
geonwoopaeng@gmail.com 2021. 4. 13. 17:35추상 class (abstract class)
메서드 내용이 추상적이기 때문에 만드는 것입니다.
구현 코드가 없이 메서드 선언만 있는 것
상위 클래스에서 구현 x -> 하위 클래스에서 구현해라 !!
// Animal.java 상위 class
public abstract class Animal {
abstract void shouting();
abstract void type();
public void move() {
System.out.println("움직입니다.");
}
}
// Human.java 하위 class
public class Human extends Animal {
@Override
void shouting() {
System.out.println("나는 사람이다!!");
}
@Override
void type() {
System.out.prinln("포유류 입니다.");
}
}
//Test.java
public class Test {
public static void main(String[] args)
{
Animal animal = new Human();
animal.shouting();
animal.type();
}
}
템플릿 메서드 (final)
코드의 흐름(시나리오)를 정의하는 메서드
하위 클래스에서 재정의 할 수 X
추상 클래스에서 템플릿 메서드로 전체적인 흐름 정의
-> 하위 클래스에서 다르게 구현하는 부분은 추상 메서드로 선언하여 수정한다.
// Animal.java 상위 class
public abstract class Animal {
public static final int MIN = 1;
abstract void shouting();
abstract void hunting();
public void move() {
System.out.println("움직입니다.");
}
//추상 메서드가 아니여서 error X
// 필요할 경우 하위 class에서 재정의 해서 사용(abstract처럼 꼭 재정의 안해도 됩니다.)
// hook 메서드
public void wash() {}
final public void eat() {
shouting();
move();
hunting();
wash();
}
}
// Human.java 하위 class
public class Human extends Animal {
@Override
void shouting() {
System.out.println("나는 사람이다!!");
}
@Override
void hunting() {
System.out.println("도구로 사냥");
}
@Override
public void wash() {
System.out.println("음식을 씼습니다.");
}
}
//Tiger.java 하위 class
public class Tiger extends Animal {
@Override
void shouting() {
System.out.println("나는 호랑이다!!");
}
@Override
void hunting() {
System.out.println("발톱으로 사냥");
}
}
//Test.java
public class Test {
public static void main(String[] args)
{
Animal animalh = new Human();
Animal animalt = new Tiger();
animalh.eat();
animalt.eat();
System.out.println(Animal.MIN);
}
}
반응형
'Tip and Error > JAVA' 카테고리의 다른 글
인터페이스 활용 (interface) (0) | 2021.04.14 |
---|---|
인터페이스 (interface) (0) | 2021.04.14 |
instance 형 확인 (instanceof) (0) | 2021.04.12 |
Override (0) | 2021.04.08 |
상속 & super() (0) | 2021.04.08 |
공지사항
최근에 올라온 글