추상화
추상화 == 같은 메소드를 쓰는 것들을 한 클래스에 몰아넣고 나머지 클래스는 다 상속시켜서 불필요한 코드를 줄인다.
추상클래스 와 추상메소드가 있다.
추상메소드가 1개라도 있다면 그 클래스는 추상클래스가 된다.
추상화의 표현은 abstract를 붙여서 사용한다
추상클래스 상속받는쪽이 무조건 재정의해줘야하는 클래스
추상메소드 특징 : abstract가 붙고 중가로가 없다. 실행구간은 상속받는쪽에서 재정의하기때문에 없다.
//어떻게 우는지
public abstract String cry();
//어떻게 움직이는지
public abstract String move();
//무엇을 먹는지
public abstract String food();
public abstract void print();
AnimalMain , Animal , dog , cat , bird 클래스를 만들어서 dog , cat , bird에서 사용될 메소드를 Animal에
추상화로 정리할 수 있다.
package day10_1;
public abstract class Animal { // 추상클래스 상속받는쪽이 무조건 재정의해줘야하는 클래스
String name;
public Animal() {
}
public Animal(String name) {
this.name = name;
}
// 추상메소드 특징 : abstract가 붙고 중가로가 없다. 실행구간은 상속받는쪽에서 재정의하기때문에 없다.
public String getName() {
return this.name;
}
//추상메소드가 하나라도 있으면 추상클래스다 .
//어떻게 우는지
public abstract String cry();
//어떻게 움직이는지
public abstract String move();
//무엇을 먹는지
public abstract String food();
public abstract void print();
}
abstract를 붙이게 되면 하위 메소드에서 꼭 재정의 해줘야한다.
cat class
package day10_1;
public class Cat extends Animal{
String cry;
String move;
String food;
@Override
public String cry() {
return cry;
}
@Override
public String move() {
return move;
}
@Override
public String food() {
return food;
}
@Override
public void print() {
System.out.println(getName()+" / "+cry+ " / "+move+" / "+food);
}
}
dog class
package day10_1;
public class Dog extends Animal{
String cry;
String move;
String food;
@Override
public String cry() {
return cry;
}
@Override
public String move() {
return move;
}
@Override
public String food() {
return food;
}
@Override
public void print() {
System.out.println(getName()+" / "+cry+ " / "+move+" / "+food);
}
}
bird class
package day10_1;
public class Bird extends Animal{
String cry;
String move;
String food;
@Override
public String cry() {
return cry;
}
@Override
public String move() {
return move;
}
@Override
public String food() {
return food;
}
@Override
public void print() {
System.out.println(getName()+" / "+cry+ " / "+move+" / "+food);
}
}
각각 Override로 메소드를 재정의해서 각 출력값이 다르게 나오게 된다.
Animal class Main
package day10_1;
public class AnimalMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Dog dog = new Dog();
dog.name = "강아지";
dog.cry = "멍멍";
dog.move = "성큼성큼";
dog.food = "뼈다귀";
Cat cat = new Cat();
cat.name = "고양이";
cat.cry = "야옹";
cat.move = "사뿐사뿐";
cat.food = "생성";
Bird bird = new Bird();
bird.name = "새";
bird.cry = "짹짹";
bird.move = "펄럭펄럭";
bird.food = "애벌레";
dog.print();
cat.print();
bird.print();
}
}
출력값
강아지 / 멍멍 / 성큼성큼 / 뼈다귀
고양이 / 야옹 / 사뿐사뿐 / 생성
새 / 짹짹 / 펄럭펄럭 / 애벌레
으로 나오게 된다.
Animal class에서 abstract로 메소드만 만든후에 각 class로 재정의해서 출력한것이다.
'Java > Java icia 10일차' 카테고리의 다른 글
상속 , 오버라이드 , 클래스를 이용하여 학교시스템 만들기 (0) | 2023.03.07 |
---|---|
오버라이딩 , 상속을 이용한 예제 (0) | 2023.03.07 |
Java 상속 , 오버라이딩 (0) | 2023.03.07 |