본문
일반클래스 상속, 추상클래스 상속
# 일반클래스 상속, 추상클래스 상속
# 일반클래스 상속
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package testAbstract; public class 본사 { // default 생성자 public 본사(){} public void 김치찌개() { System.out.println("김치찌개 0원"); } public void 부대찌개() { System.out.println("부대찌개 0원"); } public void 비빔밥() { System.out.println("비빔밥 0원"); } public void 순대국() { System.out.println("순대국 0원"); } } | cs |
1 2 3 4 5 6 7 8 9 | package testAbstract; public class 체인점 extends 본사{ String 매장명 = "인천 부평점"; public 체인점(){ System.out.println(매장명 + "입니다."); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 | package testAbstract; public class Main { public static void main(String[] args) { // 체인점 메뉴판 보여주기 체인점 메뉴 = new 체인점(); System.out.println(메뉴.매장명 + "의 메뉴는"); 메뉴.김치찌개(); 메뉴.부대찌개(); } } | cs |
Result)
1 2 3 4 | 인천 부평점입니다. 인천 부평점의 메뉴는 김치찌개 0원 부대찌개 0원 | cs |
1. 꼭 재정의 해야해 ! 하는 메소드가 하나라도 있다면 클래스가 추상클래스가 된다.
즉, 클래스 안에
public abstract void 메소드명(); 이라고 선언되어있다면
이 메소드를 포함한 클래스는 abstract라고 같이 선언하지 않으면 오류가 난다.
ex) ParentClass.java
2. 추상메소드는 { } 대괄호 안에 정의 해놓지 않는다.
상속받는 자식클래스들이 무.조.건. 재정의를 해주어야 하기 때문에 필요가 없는 것이다.
ParentClass 예제의 7번째 줄 speek(); 부분을 보면 된다.
3. abstract 클래스는 인스턴스 생성이 불가능하다.
ParentClass를 new로 객체 생성하려 한다면 다음과 같이 나온다.
speek가 추상메소드이기에 정의해주어야만 사용이 가능하다며 ..
1 2 3 4 5 | ParentClass cc = new ParentClass() { @Override public void speek() { } }; | cs |
[출처] JAVA :: 추상클래스 abstract의 이해|작성자 꽁뇽
Source01) 부모클래스.java
1 2 3 4 5 6 7 8 9 | package testAbstract; public abstract class 부모클래스 { public abstract void 말하다(); public void 아침인사를하다(){ System.out.println("안녕히 주무셨어요?"); } } | cs |
1 2 3 4 5 6 7 8 9 | package testAbstract; public class 자식클래스 extends 부모클래스 { @Override public void 말하다() { System.out.println("아부지"); System.out.println("어무이"); } } | cs |
1 2 3 4 5 6 7 8 9 | package testAbstract; public class Main { public static void main(String[] args) { 자식클래스 나 = new 자식클래스(); 나.말하다(); 나.아침인사를하다(); } } | cs |
Result)
1 2 3 | 아부지 어무이 안녕히 주무셨어요? | cs |
Q) 그렇다면, 일반클래스의 상속과 추상클래스의 상속 중 어떤 것이 더 좋을까 ?
A) JAVA를 공부하면서 많은 기능을 보며 항상 궁금해한다. 어떻게하는 것이 더 좋을까 ? 라고
답은 항상 정답은 없다고, 어떤 상황에서 이렇게 많이 쓴다더라 ~ 여서 가독성 때문에 그렇게 하는 거라는 식이었다.
개인적인 생각인데 추상클래스에는 프로젝트에 따라서 다르겠지만, 웬만해서는 추상메소드만 선언하는 것이 나을 것 같다.
패턴을 하게되면 모든 것을 알게된다 한다. 패턴을 공부합시다
- 출처 및 참고 : http://smilennv.blog.me/220443312153
댓글