본문 바로가기
🌈 백엔드/객체 지향

JAVA_객체지향_추상클래스 & 가상메서드

by 개발자 알마 2023. 6. 18.
반응형

 

 

[1] 추상 메서드 & 추상클래스


(1) 추상메서드 abstract

  • 추상메서드는 선언부만 작성하고 구현부는 작성하지 않는다
  • 상속받는 클래스에 overriding 으로 구현부를 작성한다 
/* 어떤기능을 수행할건지 기재한다 */
abstract void 메서드();
abstract void 메서드(매개변수);

 

(2) 추상클래스 abstract 

  • 추상메서드가 포함된 클래스를 말한다
  • abstract 예약어를 사용한다 
  • 인스턴스 객체를 생성할수 없다
  • 상속계층도를 따라 내려갈수록 구체화 정도가 심해지고 , 올라갈수록 공통요소만 남게된다 
// 추상클래스
abstract class Car {
	abstract void drive();
    	abstract void Engine(Sring gear);
}

 

// 하위 클래스의 추상메서드 구현 
abstract class SportsCar extends Car {
	
    void drive() {...};
    void engine(String gear) {...};
    
}

 

(3) 추상클래스 예시 

 

abstract class Unit {

	int x,y;
    	abstract void move(int x, int y);
    	void stop();

}

class Marine extends Unit {

	void move(int x, int y){...}
    	void stimpack() {...}

}

class Tank extends Unit {

	void move(int x, int y){...}
    	void chageMode() {...}

}

class Dropship extends Unit {

	void move(int x, int y){...}
    	void load() {...}
    	void unload() {...}

}

 

 

 

(4) 추상클래스 예시 

 

package ch09;

public abstract class Computer {
	
	public abstract void display(); 
	public abstract void typing(); 
	
	void turnOn() {  
		System.out.println(" 전원 on ");
	}
	
	void turnOff() {
		System.out.println("전원off ");
	}
}

 

package ch09;

public class Desktop extends Computer {

	@Override
	public void display() {
		System.out.println("하위 추상 메서드1 ");	
	}

	@Override
	public void typing() {
		System.out.println("하위 추상 메서드2 ");
	}
	
	@Override
	public void turnOff() { 
		System.out.println("turnoff 재정의  ");
	}
}

 

package ch09;

public abstract class NoteBook extends Computer { 
// 구현안함을 적용하기 위해 abstract사용 

	@Override
	public void display() {	
		System.out.println("구현안하겠다  ");
	}
}

 

package ch09;

public class MyNoteBook extends Computer {

	@Override
	public void typing() {
		System.out.println("구현 됨 ");
	}

	@Override
	public void display() {
		
	}
}
package ch09;

public class ComputerTest {

	public static void main(String[] args) {
		
		Desktop desktop = new Desktop();
		//Computer computer = new Computer(); 인스턴스 생성불가 
		
		desktop.display();
	}

}

 

 

[2] 가상 메서드 


 

(1) 가상메서드 정의 virtual method 

 

  • 상위클래스의 메서드와 하위클래스의 메서드가 오버라이딩한 같은 이름을 가지고 있다면 메서드 이름은 똑같지만 정의된 클래스 타입에 의해 호출되는 주소값은 다를수 있다. 인스턴스에 의해 메서드가 호출되는 기술이 가상메서드이다 
  • 가상 메서드 테이블(vitual method table)에서 해당 메서드에 대한 주소값을 가지고 있는것 
  • 오버라이딩 된 경우는 재정의 된 메서드의 주소를 가리킨다 
  • 가상메서드의 원리로 인해 자바에서는 항상 인스턴스의 메서드가 호출된다 
  • 자바의 모든 메서드는 가상 메서드이다
  • 가상 메서드 테이블에서는 메서드와 메서드주소값이 쌍으로 이루어져 있어 인스턴스가 메서드 호출이 쌍으로 연결된 메서드 주소값이 호출되는데 , 오버라이딩되는경우 오버라이딩된 클래스의 메서드 주소값 이 바뀌어 명령이 수행된다  

 

반응형

댓글