Develop/JAVA

JAVA 추상클래스

roalwh 2023. 10. 17. 20:51

 

//추상클래스 
//클래스의 공통된 부분을 뽑아서 별도의 클래스(추상클래스)로 만들어 놓고, 이것을 상속해서 사용한다.
//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