반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

bro's coding

java.abstract(추상화) 본문

[IT]/java

java.abstract(추상화)

givemebro 2021. 3. 4. 12:23
반응형

abstract

abstract class(추상 클래스) : 상속을 위한 class

> 직접 객체화 될 수 없다.(자식 클래스의 생성자에서 super()를 이용한 생성은 가능)
> 여러 구체화된 자식 크래스의 공통적인 멤버를 추상화한 클래스
> abstract class는 계층구조 형성자식 클래스에서의 재사용성을 높이기 위한 클래스
> 부모 클래스로서의 역할에 집중

package step3;

abstract class Person {

	public Person() {
		super();
		// TODO Auto-generated constructor stub
		System.out.println("Person 객체 생성");
	}
	
}

class Student extends Person {

	public Student() {
		super();
		// TODO Auto-generated constructor stub
		System.out.println("Student 객체 생성");
	}
	
}

public class TestAbstract1 {
	public static void main(String[] args) {
		// 아래는 error, abstract로 선언된 class는 직접 객체화(실재화) 불가
		// Person p = new Person();
		new Student();
		// 위 코드를 통해 abstract class는 직접 객체화 될 수 없지만 상속받은 자식 객체 생성시 우선해서 부모 abstract class의 객체가 생성될수 있다는 것을 알수 있다
	}
}

 

abstract method(추상 메서드) : 자식 클래스에게 메서드 구현을 강제

>구현부를 가질 수 없음
> ex) public abstract void study();
> 오직 선언만 가능
> 상속받은 자식 클래스에서는 abstract class가 되지 않고 직접 객체화 되려면 반드시 abstract method를 구현해야 함
> abstract method가 class내에서 (상속  포함)하나 이상 존재하면 해당 클래스는 abstract로 선언해야 함

 

package step3;

// abstract method의 특성을 이해하기 위한 예제
abstract class Parent { // abstract method가 1개 이상 존재하면 abstract class로 선언해야만 함
	int moeny = 100;

	public void eat() {
		System.out.println("먹다");
	}

	// 부모 클래스에서 정의할 수 없는 메서드는 아래와 같이 abstract method로 선언해서 자식 class에게 구현을 강제 함
	public abstract void study();
}

class Child extends Parent {
	// 부모의 abstract method를 아래처럼 구현(or override)해야 함
	// 만약 구현하지 않으면 아래의 child2처럼 abstract class로 선언되어야 함
	@Override
	public void study() {
		// TODO Auto-generated method stub

	}

}

abstract class Child2 extends Parent { // abstract class이므로 직접 객체화 될 수 없음(new 생성 불가)

}

public class TestAbstract2 {
	public static void main(String[] args) {
		Parent p = new Child();
		System.out.println(p.moeny);
		p.study();
	}
}

 

반응형

'[IT] > java' 카테고리의 다른 글

java.Prepare.Interview  (0) 2021.03.05
java.Interface  (0) 2021.03.04
java.Design pattern.template  (0) 2021.03.04
java.Design pattern  (0) 2021.03.04
java.final  (0) 2021.03.04
java.static(정적)  (0) 2021.03.04
java.Polymorphism.ObjectCasting(캐스팅)  (0) 2021.03.02
java.Polymorphism.instanceof(객체 타입 비교)  (0) 2021.03.02
Comments