* 추상화(모든 자식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 |