코드 그라데이션
Day25. 추상화(1) 추상클래스, 추상메서드 본문
추상화
일상에서의 사용 예시
말을 추상적으로 이야기한다.
현실적이지 않은 것을 현실적인 것 마냥 말한다.
즉, 실체는 없지만 뭔가 구상은 있는 것을 추상화라고 합니다.
추상화가 나온이유?
=> 메소드 오버라이딩 때문
메서드에서 사용하는 예시
void abc(){
System.out.println(“a”);
}
void abc();
------------------------------------------------------------------------
"추상화 되어있는 메소드가 있다"
추상화 된 메소드를 가지고 있다는 것은 객체화를 할 수 없다는 말.
추상화 되어 있는 메서드를 가질 수 있는 것
1. abstract class
2. interface
특히 중요한 것.
추상화가 있으면
필수적으로
상속을 해야 한다!!!
ex.
abstract class A {
}
A a = new A(); //에러
interface B{
}
B b = new B(); //에러
Abstract class A{
멤버변수 or 일반메서드를 가질 수 있습니다.
abstact void abc(); // 추상메서드
}
Class B extends A{
void abc(){ // 부모클래스의 메소드를 재정의를 해야합니다.
int a = 10;
….
}
}
New A() -> X
A a = new B(); => 이것은 가능함.
예제
package mega.backend_onemore.Day25;
class C {
void cmethod() {
}
}
abstract class A extends C{ // 추상화
// 내가 추상클래스인데 부모클래스를 상속받는 것 당연히 가능. 근본이 클래스
int a;
void abc() {
System.out.println("AAAAA");
}
abstract void def(); // 추상 메서드
abstract void kor(); // 추상 메서드
}
class B extends A{ // 오버라이딩 안하면 처음에 빨간줄
@Override
void def() { // 오버라이딩
System.out.println("def");
}
@Override
void kor() {
System.out.println("kor");
}
}
public class AbstractTest {
public static void main(String[] args) {
//A a = new A(); 에러 : 추상 클래스기 때문에 객체 생성 직접 못함!
B b = new B();
A a = new B(); // 객체는 자식이고 껍데기만 부모이기 때문에 가능
b.cmethod(); // 다 넘겼을 뿐이므로 조부모 것 가져올 수 있다.
b.a = 10; // 부모에 있는 a에 10을 대입하는 것 가능.
b.abc(); // 이게 자식이 오버라이딩 해버리면 부모 것도 못나옴.
// 그래서 사실상 부모 메서드도 별 필요가 없어지게 되는 것.
// 그래서 추상메서드로 만드는 것이 더 좋음
}
}
728x90
'Java > Mega' 카테고리의 다른 글
Day27-1. 제네릭 (0) | 2023.04.23 |
---|---|
Day25. 추상화 (3) final, equals() (0) | 2023.04.17 |
Day24-2. 참조자료형 형변환, 오버라이딩 예제 (0) | 2023.04.17 |
Day24. 참조자료형 형변환, 오버라이딩 (0) | 2023.04.17 |
Day23. super (1) | 2023.04.17 |
Comments