728x90
반응형
추상클래스
미완성 메서드: 몸통 { } 이 없는 미완성 메서드 = 추상클래스; 미완성 설계도
- 목적: 다른 클래스 작성에 도움을 주기 위함
- 각각의 자손 클래스마다 조건이 다르므로 꼭 필요한 메서드지만 기능을 달리할 필요가 있는 메서드들은 조상에게 상속을 받아오고 자손의 클래스로 넘어올 때 기능을 각기 구현해준다
- 각기 구현해줌으로써 코드도 간결화되고 유지보수가 쉬워지는 장점
도움이 되는 과정
- 미완성 설계도가 1개 있다고 치면 추상 클래스는 그 미완성 설계도의 작성을 도와주는 추가 설계도라고 볼 수 있다.
- 그 설계도만 고침으로써 코드의 중복을 막아주고 나머지 코드를 동일화시켜서 관리가 용이해진다.
- 또한 각각의 의미있는 단계를을 추상클래스로 정의해 놓으면 나중에 특정 부분을 수정할 때 일처리가 쉬워진다.
설명:
- 클래스 이름, 메서드에 abstract를 붙여야 함
- 인스턴스 생성이 불가능하지만 상속을 받으면 상속받은 자손 인스턴스통해 인스턴스 생성 가능
public class Unnamed {
public static void main(String[] args) {
undefined df = new defined();
}
}
class defined extends undefined{}
abstract class undefined{}
추상 클래스를 조상으로 상속받을 시
- 상속받은 모든 메서드를 구현해주어야 사용 가능
- 메서드들을 구현하지 않으면 상속받은 자손 클래스에도 abstract를 붙여줘야 함
public static void main(String[] args) {
}
}
class account extends stock{
int balance;
int stockprice;
void listup() { //미완성된 메서드를 자손의 클래스에서 구현
}
void stockprice() { // 두개다 구현하지 않으면 abstract를 붙여야 에러가 안남
// 총 상속받은 메서드가 2개이므로 꼭 2개를 다 구현해주어야 abstract를 붙이지 않음
}
}
abstract class stock{
abstract void listup();
abstract void stockprice();
}
추상 클래스에 일반 메서드 구현 가능
이유: 상속받은 자손이 객체를 생성 가능한 조건으로 맞춰주고 메서드 조건을 만들었기 때문에 미리 구현 가능
abstract class stock{
int currentprice;
int date;
abstract void listup();
abstract void stockprice(int currenprice);
void check() {
stockprice(currentprice);
}
}
추상 클래스를 조상으로 두고 자손이 클래스를 완성한 경우
출력문:
현재 가격은 10000 입니다.
삼성전자 현대차
public class Abstract {
public static void main(String[] args) {
stock ac = new account();
ac.stockprice(10000);
ac.list = "삼성전자" + " " + "현대차";
System.out.println(ac.list);
}
}
class account extends stock{
void listup() { //미완성된 메서드를 자손의 클래스에서 구현
System.out.println(list);
}
void stockprice(int currnetrprice) { // 두개다 구현하지 않으면 abstract를 붙여야 에러가 안남
// 총 상속받은 메서드가 2개이므로 꼭 2개를 다 구현해주어야 abstract를 붙이지 않음
System.out.println("현재 가격은 " + currnetrprice + " 입니다.");
}
}
abstract class stock{
String list;
abstract void listup();
abstract void stockprice(int currenprice);
}
추상 클래스의 작성
기존 클래스의 공통 부분을 추출하여 abstract, 추상 메서드로 만든 후 선언부만 추출하여
각각의 개별 클래스에 맞는 코드 작성
- 클래스들을 배열화 시켜 각각의 기능에 맞게 값을 도출 - 객체 배열화 (참조변수를 묶음)
- 아래의 예시는 가격을 달리하여 값을 출력함
출력문:
삼성전자의 현재 가격은 14000원 입니다.
삼성전자의 현재 가격은 22000원 입니다.
package Lecture;
public class Abstract {
public static void main(String[] args) {
stock[] ac2 = {new account(), new account2()};
// 클래스를 배열화 시켜 for문으로 각각의 동일한 호출문을 통해 값 도출
for(int i = 0; i<ac2.length; i++) {
ac2[i].list = "삼성전자";
System.out.print(ac2[i].list+ "의 ");
ac2[i].stockprice(10000);
}
}
}
class account extends stock{
void listup() { //미완성된 메서드를 자손의 클래스에서 구현
System.out.println(list);
}
void stockprice(int currnetrprice) { // 두개다 구현하지 않으면 abstract를 붙여야 에러가 안남
// 총 상속받은 메서드가 2개이므로 꼭 2개를 다 구현해주어야 abstract를 붙이지 않음
System.out.println("현재 가격은 " + (int)(currnetrprice * 1.4) + "원 입니다.");
}
}
class account2 extends stock{
void listup() { //미완성된 메서드를 자손의 클래스에서 구현
System.out.println(list);
}
void stockprice(int currnetrprice) { // 두개다 구현하지 않으면 abstract를 붙여야 에러가 안남
// 총 상속받은 메서드가 2개이므로 꼭 2개를 다 구현해주어야 abstract를 붙이지 않음
System.out.println("현재 가격은 " + (int)(currnetrprice * 2.2) + "원 입니다.");
}
}
abstract class stock{
String list;
abstract void listup();
abstract void stockprice(int currenprice);
}
728x90
반응형
'Java > 자바의정석 기초편' 카테고리의 다른 글
자바의 정석 7장 (17일차) - 인터페이스를 이용한 다형성 및 장점 (0) | 2022.02.04 |
---|---|
자바의 정석 7장 (16일차) - 인터페이스 (0) | 2022.02.02 |
자바의 정석 7장 (16일차) -instanceof, 다형성 (0) | 2022.02.02 |
자바의 정석 7장 (16일차) - 다형성 & 참조변수의 형변환 (0) | 2022.02.02 |
자바의 정석 7장 (15일차) - 패키지 & 클래스 패스 (0) | 2022.01.31 |