* 추상메소드


 - 미완성된 메소드로 몸통부({})가 구현되어있지 않은 메소드
 - 자식 클래스에서 해당 메소드를 오버라이딩해서 완성시켜야함 
 

 * 추상클래스


  - 미완성된 클래스 
  - 객체 생성 불가 ( 단, 레퍼런스로는 사용가능 , 다형성 적용 가능)
  - 일반 멤버변수 + 일반 메소드 [+ 추상메소드]
  => 추상메소드 없이도 추상클래스 가능 ( 추상메소드 생략가능)
   
   *추상메소드 없어도 추상클래스로 선언가능
  

 //추상메소드(미완성된 메소드) , 자식클래스에서 오버라이딩 해서 완성시켜야함 (강제성)

 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
복사했습니다!