* 추상메소드
- 미완성된 메소드로 몸통부({})가 구현되어있지 않은 메소드
- 자식 클래스에서 해당 메소드를 오버라이딩해서 완성시켜야함
* 추상클래스
- 미완성된 클래스
- 객체 생성 불가 ( 단, 레퍼런스로는 사용가능 , 다형성 적용 가능)
- 일반 멤버변수 + 일반 메소드 [+ 추상메소드]
=> 추상메소드 없이도 추상클래스 가능 ( 추상메소드 생략가능)
*추상메소드 없어도 추상클래스로 선언가능
//추상메소드(미완성된 메소드) , 자식클래스에서 오버라이딩 해서 완성시켜야함 (강제성)
public abstract void rule();
추상메소드 추가하는 순간 -> 추상 클래스로 적용하기
public abstract class Sports { // 특정클래스 안에 추상메소드가 있으면 추상클래스 선언해야함
private int people;
public Sports() {
}
public Sports(int people) {
this.people = people;
}
public int getPeople() {
return people;
}
public void setPeople(int people) {
this.people = people;
}
public String toString() {
return "people : " + people;
}
* 추상메소드 사용 이유
- 개념적 : 단지 이 클래스가 미완성된 클래스다 라는것을 부여할 목적
- 프로그래밍적 : 객체생성이 불가하게끔 하고자 할때
* 추상메소드가 존재하는 추상클래스를 쓰는이유
- 부모클래스에 추상메소드가 없을경우
- 자식클래스에서 강제로 오버라이딩 동일한 패턴의 메소드 가지게됨
-> 자식클래스 마다 실행시킬 내용은 다르지만 동일한 형태의 메소드로 구현하고자 할때
-> 메소드 통일성 확보.
--표준화됨
<추상 메소드 - 자식클래스에서 오버라이딩>
public class BasketBall extends Sports{
@Override
public void rule() {
System.out.println("공을 항상 손으로만 쳐야된다.");
}
}
public class FootBall extends Sports{
@Override
public void rule() {
System.out.println("공을 발로만 차야된다. ");
}
}
<실행클래스>
// Sports s = new Sports();// 추상클래스로 객체생성 불가
// Sports s; //객체생성이 안될뿐이고 레퍼런스로는 사용가능
Sports s = new BasketBall(); // 다형성 적용 가능
Sports[] arr = new Sports[2];
arr[0] = new BasketBall();
arr[1] = new FootBall();
for(int i=0; i<arr.length; i++) {
arr[i].rule(); // 동적 바인딩
}
for(Sports a : arr) { //Sports a = arr[0]; -> Sports a = arr[1];
a.rule();
}
>> 실행 결과
공을 항상 손으로만 쳐야된다.
공을 발로만 차야된다.
공을 항상 손으로만 쳐야된다.
공을 발로만 차야된다.
'JAVA' 카테고리의 다른 글
10. API _ Math (0) | 2022.11.04 |
---|---|
9_3. 다형성 _ 인터페이스 (0) | 2022.11.03 |
9_1 .다형성 (0) | 2022.11.03 |
8_2. 상속 오버라이딩 (0) | 2022.11.02 |
8. 상속 (0) | 2022.11.02 |