카테고리 없음
자바_ 추상클래스 개념과 응용 (+다형성)
lsme
2022. 4. 14. 19:57
개념)
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
|
//추상클래스
//1. 추상클래스는 객체로 생성할 수 없다.
//2. 추상클래스의 기능은 추상클래스를 상속받은 자식클래스 객체를 생성하여 사용한다.
//3. 추상클래스를 부모클래스로 정의할때는 자식 클래스에 반드시 존재해야하지만,
//자식클래스에서 구현할 기능이 너무 다르기 때문에
//부모 클래스에서 공통적인 기능을 정의할 수 없을 때 구현을 강요하기 위해서 사용됨.
abstract class AbstractClass{
//일반변수
int age;
//일반 메소드
void generalMethod() {
System.out.println("generalMethod");
}
//추상메서드
//정의부만 있고, 구현부가 없음.
//추상메소드에는 abstract 예약어가 지정되어야 한다.
//추상메소드가 하나라도 정의된 클래스는 추상클래스가 된다.
//(일반클래스가 될 수 없다. )
abstract void abstractMethod();
}
class AbstractClassChild extends AbstractClass{
@Override
void abstractMethod() {
// TODO Auto-generated method stub
System.out.println("구현");
}
}
public class AbstractTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.
//AbstractClass abstractClass = new AbstractClass(); //에러남.
//2.
AbstractClassChild abstractClassChild = new AbstractClassChild();
abstractClassChild.abstractMethod();
}
}
|
cs |
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
|
//추상클래스의 상속
//특정 추상클래스를 상속한 추상클래스를 상속하는 클래스가 일반클래스가 되려면
//상속구조에 있는 모든 추상클래스에 정의된 추상메소드를 구현해야 한다.
abstract class AbstractClass1{
abstract void abstractMethod1();
}
abstract class AbstractClass2 extends AbstractClass1{
//당연히 상속 받았으니까, abstractMethod1()가 포함된것이다.
abstract void abstractMethod2();
}
class GeneralClass extends AbstractClass2{
@Override
void abstractMethod1() {
// TODO Auto-generated method stub
}
@Override
void abstractMethod2() {
// TODO Auto-generated method stub
}
}
public class AbstractTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
|
cs |
예제1)
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
|
//추상클래스도 다형성 제공.
abstract class Vehicle{ //운송수단
abstract void transfer();
}
class Car extends Vehicle{
@Override
void transfer() {
// TODO Auto-generated method stub
//transfer 부모 속성을 Car에 맞게 구성하자.
System.out.println("차도로 나른다.");
}
}
class Ship extends Vehicle{
@Override
void transfer() {
// TODO Auto-generated method stub
//transfer 부모 속성을 Ship에 맞게 구성하자.
System.out.println("수로로 나른다.");
}
}
class Plane extends Vehicle{
@Override
void transfer() {
// TODO Auto-generated method stub
//transfer 부모 속성을 Plane에 맞게 구성하자.
System.out.println("하늘로 나른다.");
}
}
class VehicleInfo { //운송수단의 정보를 제공하는 클래스
void printTransferStyle(Vehicle vehicle) {
vehicle.transfer(); //오버라이딩된 후속 메소드 //부모클래스
}
}
public class AbstractTest3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
VehicleInfo vehicleInfo = new VehicleInfo();
vehicleInfo.printTransferStyle(new Car());
vehicleInfo.printTransferStyle(new Ship());
vehicleInfo.printTransferStyle(new Plane());
}
}
|
cs |
응용
<문제>
요구사항
첫번째 클래스, 추상클래스 : Ship_1
추상메소드
int getPersonNumber() //배가 나를 수 있는 사람 수를 반환.
int getWeaponNumber() //배가 나를 수 있는 무기 수를 반환.
String getname() //배 이름 반환
구현 클래스(자식 클래스)
Boat, Cruise
유틸클래스 : ShipUtil
메소드
public static void search(Ship s)
메인클래스 : ShipMain
출력결과 (search 2번 호출)
이름 : 영국보트
사람 수 : 90명
무기수 : 5정
이름: 미국전함
사람수: 200명
무기수 : 210정
<내가 한 것>
<출력결과값> //유틸 클래스를 마음대로 만듬.
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
50
51
52
53
54
|
abstract class Ship_1{ //운송수단
abstract int getPersonNumber();
abstract int getWeaponNumber();
abstract String getName();
}
class Boat extends Ship_1{
@Override
String getName() {
// TODO Auto-generated method stub
return "영국보트";
}
@Override
int getPersonNumber() {
// TODO Auto-generated method stub
return 90;
}
@Override
int getWeaponNumber() {
// TODO Auto-generated method stub
return 5;
}
}
class Cruise extends Ship_1{
@Override
String getName() {
// TODO Auto-generated method stub
return "미국전함";
}
@Override
int getPersonNumber() {
// TODO Auto-generated method stub
return 200;
}
@Override
int getWeaponNumber() {
// TODO Auto-generated method stub
return 210;
}
}
class ShipInfo{
void printShipInfo(Ship_1 ship) {
System.out.println("이름: " + ship.getName());
System.out.println("사람수: " +ship.getPersonNumber()+"명");
System.out.println("무기수: " + ship.getWeaponNumber() +"정");
}
}
public class ShipMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
ShipInfo shipinfo = new ShipInfo();
shipinfo.printShipInfo(new Boat());
shipinfo.printShipInfo(new Cruise());
}
}
|
cs |