쉱이
article thumbnail
728x90
반응형

 


자바 추상클래스 개념

 

추상메소드란 자식클래스들의 공통적인 특징을 변수나 메서드로 정의만 해 놓는 것을 의미합니다.

추상 클래스는 추상 메소드를 하나라도 가지고 있는 클래스를 의미합니다. 

 

음.. 다르게 말하면 여러가지 객체에서 공통점을 추출하여 부모 클래스에 선언 및 구현을 하고 자식 클래에서는 특징을 구현하여 기능을 확장하는 것을 의미합니다

더 쉽게 말하자면  강아지, 고양이, 양, 소 라는 클래스가 있으면 동물이라는 공통점이 있다

추상클래스에서 "운다"라는 선언만 해놓고 어떻게 우는지에 대한 내용은 강아지 클래스와 고양이 클래스에게 할 수 있게 설정한다. 

 


추상 클래스 문법

 

추상클래스를 상속받는 자식클래스는 부모의 추상 메소드를 상황에 맞게 적절히 구현해주어야합니다.

추상 메소드는  'abstract'를 사용해야합니다.

abstract class 클래스이름 {
 // 어떤 기능을 수행할 건지 코드로 작성
    abstract 반환타입 메소드이름();
}

 


추상클래스 특징

 

  • 추상클래스는 인스턴스화 할수가 없습니다.
  • abstract를 앞에 붙이고 클래스 안에  추상메소드를 포함하고 있다는 것을 제외하면 사실 일반 클래스와 차이가 없습니다.
  • 메서드 선언만 있고 구체적은 내용은 없으므로 객체를 생성할 수 없습니다. 
    부모 클래스로서의 역할을 하지만 구체적인 사용은 상속받은 자식 클래스에서 오버라이딩하여 사용해야 합니다
  • 추상클래스에서 선언만 해 놓음으로써 이후 새로운 자식 클래스들이 이를 상속받아 구현하므로 새로운 클래스를 작성할 때 하나의 틀이 됩니다
  • 추상클래스의 변수를 초기화 및 자동초기화를 할 수 있습니다.
  • 생성자와 일반 메소드를 가질 수 있습니다.
  • 여러 명의 개발자가 함께 작업할 때 코드의 확장과 분업을 효율적으로 처리할 수 있습니다.

 


메소드 오버라이딩

 

오버로딩이란 서로 다른 시그니처를 갖는 여러 메소드를 하나의 이름으로 정의하는 것입니다.

오버라이딩이란 상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의하는 것입니다 

 

 

자바에서 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메소드를 상속(extentds)받습니다 이렇게 상속받는 메소드는 그대로 사용해도 되고 필요 동작을 위해 재정의하여 사용이 가능합니다.

즉, 메소드 오버라이딩은 상속받은 부모 클래스의 메소드를 재정의하여 사용하는 것을 의미합니다.

 

오버로딩은 새로운 메소드를 정의하는 점과 오버라이딩은 상속받은 기존의 메소드를 재정의 한다는 점에서 차이를 볼 수 있습니다.

 


추상클래스와 오버라이딩의 관계

 

추상클래스에서 오버라이딩은 해야합니다

자식 클래스는 무조건 부모 클래스로부터 상속받은 추상 메소드를 오버라이딩하여 재정의해ㅑ야합니다.

추상 메서드를 포함하고 있다면 곧 추상 클래스가 되어야 하디 떄문입니다.

만약 재정의를 하기 싫다면 자식 클래스도 class 앞에 abstract를 붙여 추상으로 만들어야합니다

 

 

아래는 위에 설명을 하고 한 번 작성한 코드 입니다 많은 사람들이 동물로 많은 비유를 하셔서 저도 한 번 동물로 해보았습니다.

abstract class Animal { 
	abstract void cry(); 
}

class Cat extends Animal {
	void cry() { 
	System.out.println("고양이 냥"); 
	} 
}

class Dog extends Animal { 
	void cry(){
		System.out.println("강아지 멍!"); 
	} 
}

public class Abstract_class {
    public static void main(String[] args) {
        Cat c = new Cat();
        Dog d = new Dog();

        c.cry();
        d.cry();
    }

}

 

위 코드를  실행시키면 다음과 같이 나타납니다

 

728x90
반응형

'언어 > JAVA' 카테고리의 다른 글

[JAVA] JAVA 배열(array)선언  (0) 2022.01.21
[JAVA] 조건문(if, if else, else)  (0) 2022.01.20
[JAVA] Scanner 클래스  (0) 2022.01.19
[JAVA] Hello World~  (0) 2022.01.19
profile

쉱이

@ILV_쉱이

감사합니다:)