'추상화(abstract)'에 해당되는 글 1건

  1. 2012.07.28 추상화(abstract)

* 추상화(모든 자식class들이 동일하게 하는 것들을 모아서 부모class에 추상화 시켜 놓는 것)
- 추상메소드 :  자식클래스들이 부모클래스의 메소드를 오버라이딩 해서 사용하게 하려고 만듬.
Animal
------
eat()     <- 추상메소드


Dog       Cat        Lion
----      ----       -----
eat()     eat()      eat()

* abstact - instance 메소드, class에 사용되는 제한자
          - 의미 :  추상적이다->구현이 안되었다.
- 메소드 :  메소드 구현없이 선언만한 메소드
예) public abstact void go(); ->{}붙으면 안됨.
->하위 class에서의 overriding 을 강제한다.
->하위class들이 구현할 메소드의 template(틀)역할.


- class -> 객체생성을 못하는 class
예 ) public abstact class Animal{구현}

-abstract 메소드를 가지는 class는 반드시 abstract class가 되야한다.
-부모 class에 정의된 abstract메소드를 overriding 안하면 abstract class가 되야한다.
-abstract class는 구현된 일반메소드도 가질수 있따.

- > 역할 :  자식 class의 template, 자식 객체에 대한 type 역할 - 다형성

 

* abstract class - 일반class
                   field
                   생성자
                   메소드
                   추상메소드
                  

*
project : day18
package : abstr.test
class : AbstractTest

package abstr.test;

abstract class Super{
 int num;

 public Super() {}

 public Super(int num) {
  this.num = num;
 }
 public abstract void methodA();
 public void templateMethod(){
  System.out.println("하위클래스의 구현이 모두 같은 메소드 : "+num);
 }
}
class Sub extends Super{
 public Sub(){}
 public Sub(int num){
  super(num);
 }
 
 public void methodA(){
  System.out.println("Sub.methodA()");
 }
}
public class AbstractTest {
 public static void main(String[] args) {
  //Super s = new Super(); //추상클래스는 객체 생성을 할 수 없다.
  Sub sub = new Sub();
  sub.methodA();
  Sub sub2 = new Sub(100);
  sub2.templateMethod();
 }
}

---------------------------------

project : day18
package : abstr.animal
class : PolymorphicArgsTest


package abstr.animal;

public class PolymorphicArgsTest {
 public void raise(Animal an){
  an.eat();
  an.sleep();
  
 }
 public static void main(String[] args) {
  Dog d = new Dog();
  Lion l = new Lion();
  
  d.eat();
  d.sleep();
  
  System.out.println("------------------------");
  
  PolymorphicArgsTest pt = new PolymorphicArgsTest();
  pt.raise(d);
  pt.raise(l);
 }
}


------


package abstr.animal;

//하위클래스들의 type, 하위클래스들의 틀(Template) -> 추상클래스
public abstract class Animal {
 public abstract void eat();
 public abstract void sleep();

}

---------

package abstr.animal;

public class Lion extends Animal{

 @Override
 public void eat() {
  System.out.println("사자가 먹는다.");
 }

 @Override
 public void sleep() {
   System.out.println("사자가 잔다.");
 }
 
}


------

package abstr.animal;

public class Dog extends Animal{

 @Override
 public void eat() {
  System.out.println("개밥 그릇에 사료를 우그적 먹는다.");
 }

 @Override
 public void sleep() {
  System.out.println("개집에서 잔다.");
 }

 
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

컬렉션(collection)  (0) 2012.07.28
인터페이스(interface)  (0) 2012.07.28
다형성 - 실습  (0) 2012.07.28
다형성(polymorephism)  (0) 2012.07.28
의존관계(dependency)  (0) 2012.07.28
Posted by 조은성
,