<Shape.java>- 추상클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package ex01.Abstract;
 
public abstract class Shape { //Super class = abstract class
    
    protected double result = 0//protected ->상속관계안에서는 다른 패키지여도 사용가능해짐
    public abstract double calc(double x); //abstract method
    public abstract void show(String name); //abstract method
    
    public void view() { //추상클래스 안에 일반 메소드생성도 가능
        System.out.println("Super class Shape");
    }
 
}
 
cs

 

▶abstract method는 abstract class 안에서만 선언가능

▶접근지정자 protected는 상속관계안에서는 다른 패키지여도 사용가능함

▶abstract class안에는 일반 메소드생성 가능 


<Circle.java>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package ex01.Abstract;
 
public class Circle extends Shape { //Sub class
 
    @Override
    public double calc(double x) {
        result = x * x *Math.PI; //result는 super class에 있는 변수
        return result;
    }
 
    @Override
    public void show(String name) {
        calc(5.5);
        System.out.println(result + "반지름의 " + name + "이 그려졌습니다.");
    }
 
}
 
cs

 

▶sub class안에서는 super class안의 변수를 바로 가져다 사용 가능


<Triangle.java>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package ex01.Abstract;
 
public class Triangle extends Shape {
    
    int w = 100;
    
    @Override
    public double calc(double x) {
        result = x * w / 2
        return result;
    }
 
    @Override
    public void show(String name) {
        calc(9.0);
        System.out.println(result + "크기의 " + name + " 그려졌습니다.");
 
    }
 
}
 
cs

<Rectangle.java>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package ex01.Abstract;
 
public class Rectangle extends Shape {
    
    int h=10;
 
    @Override
    public double calc(double x) {
        result = x * h;
        return result;
    }
 
    @Override
    public void show(String name) {
        calc(8.8);
        System.out.println(result + "크기의 " + name + " 그려졌습니다.");
        
    }
 
}
 
cs

<MaintEntry.java>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package ex01.Abstract;
public class MainEntry {
    public static void main(String[] args) {
        
        
        System.out.println("<<<배열 이용해서 객체 생성>>>");
        //방법3)배열 이용한 형태 
        Shape[] sh = new Shape[3]; //배열 선언 및 생성, Shape타입(부모클래스)로 배열 생성!!!
        //cf)Shape ss = new Shape(); -> 객체 생성(but,추상클래스는 자체적으로 객체 생성할 수 없다)
        sh[0= new Circle(); //부모클래스를 이용해서 객체생성한 것!
        sh[1= new Rectangle();
        sh[2= new Triangle();
        
        String[] name = {"Circle""Rect""Triangle"};
        for(int i =0; i<sh.length; i++) {
            sh[i].show(name[i]);
        }
        
        
 
        System.out.println("\n\n<<<부모 추상클래스를 이용해서 객체 생성>>>");
        //방법2)Shape 부모 추상 클래스를 이용해서 객체 생성
        Shape s = new Circle();
        s.show("Circle");
        
        s = new Rectangle();
        s.show("Rectangle");
        
        s = new Triangle();
        s.show("Triangle");
 
        
        
        System.out.println("\n\n<<<각자의 클래스로 객체 생성>>>");
        //방법1)각자의 클래스로 객체 생성 
        Circle c = new Circle();
        c.show("원");
        
        Rectangle r = new Rectangle();
        r.show("사각형");
        
        Triangle t = new Triangle();
        t.show("삼각형");
    
        
    }
 
}
 
cs

<<<배열 이용해서 객체 생성>>>
95.03317777109125반지름의 Circle이 그려졌습니다.
88.0크기의 Rect 그려졌습니다.
450.0크기의 Triangle 그려졌습니다.


<<<부모 추상클래스를 이용해서 객체 생성>>>
95.03317777109125반지름의 Circle이 그려졌습니다.
88.0크기의 Rectangle 그려졌습니다.
450.0크기의 Triangle 그려졌습니다.


<<<각자의 클래스로 객체 생성>>>
95.03317777109125반지름의 원이 그려졌습니다.
88.0크기의 사각형 그려졌습니다.
450.0크기의 삼각형 그려졌습니다.


<객체 생성 방법 3가지>

1.각자의 클래스로 객체 생성

  Circle c = new Circle();

 

2.부모 추상 클래스를 이용해서 객체 생성 

   Shape s = new Circle();

 

3.배열을 활용한 객체 생성

  1)배열 선언 및 생성 - 부모클래스 타입으로 배열 생성

     Shape[] sh = new Shape[3]; 

     cf)Shape sh = new Shape(); -> 추상클래스는 자체적으로 객체 생성 X

  2)선언한 배열에 각 sub class 객체생성해서 넣는다 

     sh[0] = new Circle(); 
     sh[1] = new Rectangle();
     sh[2] = new Triangle();

     =>부모 클래스를 이용해서 객체 생성한 것 

+ Recent posts