-
추상클래스는 항상 추상 메서드를 포함한다.
추상메서드는 인터페이스처럼 구현코드가 없다. 추상클래스는 일반클래스처럼 상속을 받아서 사용한다.
그러므로 extends를 이용해서 작성한다.
추상클래스와 추상메서드를 사용하는 이유는 상속받은 하위클래스에서도 같이 공유하며 사용할 메서드를 구현하기 위해서이다.
그래서 추상클래스 안에 추상메서드는 구현코드없이 쓴 후에 상속받은 클래스에서 강제로 구현하도록 만든 후 구현코드를 입력해서 사용한다. 이때 이전에 배웠던 메서드 오버라이딩 개념이 나오는데 메서드를 상속받은 클래스에서 재정의하기 때문이다.
주의할 사항은 추상클래스에서 사용하는 코드에서 추상메서드와 일반메서드를 구분해서 작성해야하는 것이고, {}또한 코드를 구현한 것이기에 주의해야한다.
추상클래스와 추상메서드에 대한 구현코드의 예시를 작성해보자.
public abstarct class AbstractExample{
public int number;
public string name;
public string address;
public AbstractExample(){
System.out.println("==AbstractExample==");
}
public AbstractExample(int= i, string n, string a){
System.out.println("==AbstractExample==");
this.number = i;
this.name = n;
this.address = a;
}
public void run1(){
System.out.println("==run1() ==")
}
//구현코드가 있는 일반 메서드의 부분이므로 추상메서드와 구분해라 //
public abstract void run2();
//abstract를 쓰면서 중괄호까지 포함해서 구현코드가 없는 추상메서드 부분이다.//
}
이 추상메서드 부분을 상속받는 클래스로 구현하여 메서드를 재정의해주면
추상클래스와 추상메서드를 구현하는 것이 된다.
public class ClassExample extends AbstractExample{
public ClassExample(){
System.out.println("==ClassExample ==");
}
public ClassExample(int= i, string n, string a){
super(i,n,a);
//부모요소로 넘어가는 super()함수를 사용했다.
}
@override
public void run2();{
System.out.println("==run2()==");
}
//이전 클래스에서 받아온 추상메서드의 구현코드를 작성한다.
}
main함수로 추상클래스를 new생성자로 호출해서
AbstractExample A = new ClassExample(77, "Kim", "Seoul");
A.run1();
A.run2();
//추상클래스(데이터 타입 & 생성된 클래스 & 인스턴스라고 칭한다.) 참조변수(레퍼런스) = new 상속받은 클래스명(); 으로 호출문을 작성한다.//
출력하면
==AbstractExample==
==run1() ==
==run2() ==
가 된다.
정리해보면 추상클래스 안에서도 멤버변수나 일반메서드 그리고 추상메서드도 선언이 구성이 가능하고, 추상메서드의 경우에는 상속을 받은 클래스로 구현코드를 받아서 구현한다.
super()라는 함수로 데이터를 연동해서 사용할 수도 있다.
추상클래스에서 일반메서드와 추상메서드를 혼용해서 사용하면 다양한 데이터 타입과 값을 쓸 수 있다는 것을 생각하자.
'자바 > 자바 키포인트' 카테고리의 다른 글
[자바] 기존 String 클래스의 특성과 StringBuffer, StringBuilder 클래스의 정의 정리하기 (0) 2022.11.15 [자바] 람다식의 정의&특징과 정리하기 (0) 2022.11.14 [자바] 인터페이스의 정의와 implements의 개념 & 사용방법 간단한 예시 정리하기 (0) 2022.11.12 [자바] 부모 클래스와 자식 클래스의 상속관계와 관련된 메서드 오버라이딩과 super 클래스 (0) 2022.11.07 [자바] extends 상속의 개념과 예시 정리하기 (0) 2022.11.07 댓글