코드 그라데이션

Day25. 추상화(1) 추상클래스, 추상메서드 본문

Java/Mega

Day25. 추상화(1) 추상클래스, 추상메서드

완벽한 장면 2023. 4. 17. 20:12

추상화

일상에서의 사용 예시

말을 추상적으로 이야기한다.

현실적이지 않은 것을 현실적인 것 마냥 말한다.

 

즉, 실체는 없지만 뭔가 구상은 있는 것을 추상화라고 합니다.

 

추상화가 나온이유? 

=> 메소드 오버라이딩 때문

 

메서드에서 사용하는 예시

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