//추상클래스
//클래스의 공통된 부분을 뽑아서 별도의 클래스(추상클래스)로 만들어 놓고, 이것을 상속해서 사용한다.
//abstract 클래스의 특징
/*멤버변수를 가진다.
* abstract 클래스를 상속하기 위해서는 extends를 이용한다.
* abstract 메서드를 가지며, 상속한 클래스에서 반듯이 구현해야 한다.
* 일반 메서드도 가질 수 있다.
* 일반 클래스와 마찬가지로 생성자도 있다.
* 인터페이스와 어느정도 비슷한 기능을 가진다.
*
*/
//MainClass.java
public class MainClass {
public static void main(String[] args) {
AbstractClassEx ex = new ClassEx(10, "java");
ex.fun1();
ex.fun2();
//Bank 예제
System.out.printf("\n Bank 예제\n");
Bank myBank = new MyBank("박찬호", "123-4567-89012", 10000);
myBank.deposit(); //예금
myBank.withdraw(); //출금
myBank.installmentSavings(); //적금
myBank.cancellation(); //해약
System.out.println();
myBank.getInfo();
}
}
//추상클레스 선언시 abstract <추상클래스앞에 붙는다.
//AbstractClassEx.java
public abstract class AbstractClassEx {
//일반적인 변수선언가능
int num;
String str;
public AbstractClassEx() {
System.out.println("AbstractClassEx constructor");
}
public AbstractClassEx(int i, String s) {
System.out.println("AbstractClassEx constructor");
//this -> 위에 선언한 변수
this.num = i;
this.str = s;
}
public void fun1() {
System.out.println(" -- fun1() START -- ");
}
//추상 메서드,선언만 있고 정의되어있지않음
public abstract void fun2();
}
//extends AbstractClassEx를 상속받는다.
//ClassEx.java
public class ClassEx extends AbstractClassEx {
public ClassEx() {
System.out.println("ClassEx constructor");
}
public ClassEx(int i, String s) {
//super 상위 클래스의 변수
super(i, s);
}
//선언만 있고 정의되지않은 추상메서드를 반드시 구상해야된다.
@Override
public void fun2() {
System.out.println(" --fun2(); START --");
}
}
//Bank 추상 클래스
//Bank.java
public abstract class Bank {
String name;
String account;
int totalAmount;
public Bank() {
System.out.println("Bank constructor");
}
public Bank(String name, String acconut, int totalAmount) {
System.out.println("Bank constructor");
this.name = name;
this.account = acconut;
this.totalAmount = totalAmount;
}
//예금
public void deposit() {
System.out.println(" -- deposit(); START --");
}
//출금
public void withdraw() {
System.out.println(" -- withdraw() START --");
}
//적금
public abstract void installmentSavings();
//해약
public abstract void cancellation();
//정보출력
public void getInfo() {
System.out.printf("name : %s \n", name);
System.out.printf("account : %s \n", account);
System.out.printf("totalAmount : %s \n", totalAmount);
}
}
//Bank 추상 클래스를 상속받는다.
//MyBank.java
public class MyBank extends Bank {
public MyBank(String name, String account, int totalAmount) {
super(name, account, totalAmount);
}
@Override
public void installmentSavings() {
System.out.println(" -- installmentSavings() START --");
}
@Override
public void cancellation() {
System.out.println(" -- installmentSavings() START --");
}
}
결과값
AbstractClassEx constructor
-- fun1() START --
--fun2(); START --
Bank 예제
Bank constructor
-- deposit(); START --
-- withdraw() START --
-- installmentSavings() START --
-- installmentSavings() START --
name : 박찬호
account : 123-4567-89012
totalAmount : 10000
'Develop > JAVA' 카테고리의 다른 글
JAVA 문자열클래스(String,StringBuffer, StringBuilder) (0) | 2023.10.17 |
---|---|
JAVA 람다식 (0) | 2023.10.17 |
JAVA 인터페이스 (0) | 2023.10.17 |
JAVA 내부(inner) 클래스와 익명(anonymous) 클래스 (0) | 2023.10.17 |
JAVA 상속 특징 (0) | 2023.10.17 |