<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();
=>부모 클래스를 이용해서 객체 생성한 것
'JAVA > 13_abstract' 카테고리의 다른 글
abstract - <<2.여러 클래스로 나누어 작성>> (0) | 2021.01.21 |
---|---|
abstract - <<1.하나의 페이지에 작성>> (0) | 2021.01.21 |