반응형
[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)에서 해당 메서드에 대한 주소값을 가지고 있는것
- 오버라이딩 된 경우는 재정의 된 메서드의 주소를 가리킨다
- 가상메서드의 원리로 인해 자바에서는 항상 인스턴스의 메서드가 호출된다
- 자바의 모든 메서드는 가상 메서드이다
- 가상 메서드 테이블에서는 메서드와 메서드주소값이 쌍으로 이루어져 있어 인스턴스가 메서드 호출이 쌍으로 연결된 메서드 주소값이 호출되는데 , 오버라이딩되는경우 오버라이딩된 클래스의 메서드 주소값 이 바뀌어 명령이 수행된다
반응형
'🌈 백엔드 > 객체 지향' 카테고리의 다른 글
JAVA_객체지향_인터페이스 예시 (0) | 2023.06.19 |
---|---|
JAVA_객체지향_인터페이스 (2) | 2023.06.18 |
JAVA_객체지향_다형성 & 업캐스팅 & 다운캐스팅 (0) | 2023.06.18 |
JAVA_객체지향_오버로딩 & 오버라이딩 (0) | 2023.06.18 |
JAVA_객체지향_상속 & super (0) | 2023.06.18 |
댓글