반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- sqld revoke
- Java Cat
- java 로또
- sqld remame
- JAVA 연산자
- sqld grant
- JAVA 제어문
- java 논리연산자
- SQL
- PLSQL
- sqld trigger
- java 함수
- JAVA for문
- java 구구단
- java Animal
- SQLD 특강
- sqld 옵티마이져
- java spider
- SQLD 핵심포인트
- java
- SQLD 자격시험 개념정리
- java Fish
- java string
- java 상속
- java 성별
- sqld 자격증
- sqld deny
- Java 메소드
- java 단축키
- SQLD 옵티마이저
Archives
- Today
- Total
SQLD, ECLIPS, JAVA,PYTHON, NODE....
[Eclips] Java Class 6 - 상속구조, final, tostring 본문
728x90
반응형
SMALL
2023.12.14
##상속구조
- 하위클래스들이 상위클래스의 매소드(함수)들을 호출하기 편하게 하는 구조.
- 상위 클래스: 부모(Friend class) / 출력정보는 main에서만 가능
-하위 클래스: 자식(HighFriend class / Univers class)
-하위 클래스: 자식(FriendHandler)
(연습1) Friend로 상속구조 이해하기
package oop.friend;
public class Friend { // 부모 클래스. 기본값을 입력헤두면, 자식클래스 사용되도록 구성
String name, phoneNum, addr;
public Friend(String name, String phone, String addr) {
this.name = name;
this.phoneNum = phone;
this.addr = addr;
}
// 전체 정보 출력
public void showData() {
System.out.print("이름 : " + name );
System.out.print("전화번호 : " + phoneNum );
System.out.print("주소 : " + addr );
}
// 간단한 정보(이름/전화번호)만 출력
public void showBasicInfo() {
}
}
package oop.friend;
public class HighFriend extends Friend { //자식2 클래스, 부모클래스 상속가능 --> 형태: extends 부모클래스명
String job; //major란 변수 생성
public HighFriend(String name, String phone, String addr, String job) { //현재 클래스명과 동일해야 됨
super(name, phone, addr); //Friend(부모클래스) 변수호출. super란 메소드(함수) 사용
this.job = job; //UnivFriend클래스의 major를 사용하는 메소드(함수) this.을 사용
}
public void showData() { //(상속)부모클래스의 showData 사용
super.showData(); //super로 부모클래스 모든 정보호출
System.out.println("직업: " + job); //UnivFriend의 major 변수값을 호출
}
public void showBasicInfo() { //(상속)부모클래스의 showBasicInfo를 호출
System.out.println("이름: " + name); //Friend(부모클래스)의 showBasicInfo를 호출
System.out.println("전화: "+ phoneNum);
}
}
package oop.friend;
public class UnivFriend extends Friend{ //자식2 클래스, 부모클래스 상속가능 --> 형태: extends 부모클래스명
String major; //major란 변수 생성
public UnivFriend(String name, String phone, String addr, String job) { //현재 클래스명과 동일해야 됨
super(name, phone, addr); //Friend(부모클래스) 변수호출. super란 메소드(함수) 사용
this.major = major; //UnivFriend클래스의 major를 사용하는 메소드(함수) this.을 사용
}
public void showData() { //(상속)부모클래스의 showData 사용
super.showData(); //super로 부모클래스 모든 정보호출
System.out.println("직업: " + major); //UnivFriend의 major 변수값을 호출
}
public void showBasicInfo() { //(상속)부모클래스의 showBasicInfo를 호출
System.out.println("이름: " + name); //Friend(부모클래스)의 showBasicInfo를 호출
System.out.println("전화: "+ phoneNum);
}
}
package oop.friend;
import java.util.Scanner;
public class MyFriendInfoBook {
public static void main(String[] args) {
FriendInfoHandler handler = new FriendInfoHandler(2); //FriendInfoHandler의 2개를 handler란 변수에 담고
while(true) { //while문으로 true값을 확인해 출력
System.out.println("메뉴선택");
System.out.println("1. 고교친구 저장");
System.out.println("2. 대학동기 저장");
System.out.println("3. 주소록 전체정보 출력");
System.out.println("4. 조소록 간단정보 출력");
System.out.println("5. 프로그램 종료");
System.out.println(">> 선택");
Scanner sc=new Scanner(System.in); //while문에 입력할 값을 키보드로 입력해야 되므로 키보드 생성
int choice =sc.nextInt(); //키보드에 입력될 숫자를 choice란 변수에서 찾음
switch(choice) { //switch문으로 choice변수의 숫자로 구분
case 1 : case 2: handler.addFriend(choice); break; //1,2일때 FriendOfHandler의 addFriend에 선언된 handler의 choice변수에서 찾는 출력메소드(choice로 1개만 찾음)
case 3 : handler.showAlldata(); break; //3일째, FriendOfHandler의 showAlldate에 선언된 handler의 choice변수에서 찾는 출력메소드
case 4 : handler.showSimpledata(); break; //4번째, FriendOfHandler의 showSimpledate에 선언된 handler의 choice변수에서 찾는 출력메소드
case 5 :
System.out.println("프로그램을 종료합니다.");
return;
}
}
}
}
(문제2) 아이템으로 상속구조 구현하시오.
package oop.ItemEx;
//부모 클래스
public class Item {
String itemNo, title, price;
public Item(String itemNo, String title, String price) {
this.itemNo = itemNo;
this.title = title;
this.price = price;
}
//아이템 정보
public void ItemShow() {
System.out.println("구매할 물건번호 입력하세요.: ");
System.out.println("구매할 제목 : ");
System.out.println("구매 가격 : ");
}
// 아이템 기본이름
public void ItemBasicName() {
}
}
package oop.ItemEx;
//자식1 클래스
public class CD extends Item {
String cd;
public CD(String itemNo, String title, String price, String singer, String trackNum, String outDate) {
super(itemNo, title, price);
this.cd=cd;
}
public void ItemShow() {
super.ItemShow();
System.out.println("CD는" + cd);
}
public void ItemBasicName() {
System.out.println("CD아이템번호 : "+ itemNo);
System.out.println("CD제목 : "+ title);
System.out.println("CD가격 : "+ price);
}
}
package oop.ItemEx;
//자식2 클래스
public class DVD extends Item {
String dvd;
public DVD(String itemNo, String title, String price, String actor, String runtime, String outDate1) {
super(itemNo, title, price);
this.dvd=dvd;
}
public void ItemShow() {
super.ItemShow();
System.out.println("DVD는" +dvd);
}
public void ItemBasicName() {
System.out.println("DVD아이템번호 : " + itemNo);
System.out.println("DVD제목 : " + title);
System.out.println("DVD가격 : " + price);
}
}
package oop.ItemEx;
//자식3 클래스
public class Book extends Item {
String book;
public Book(String itemNo, String title, String price, String name, String pageNum, String outDate2) {
super(itemNo, title, price);
this.book=book;
}
public void ItemShow() {
super.ItemShow();
System.out.println("Book은" + book);
}
public void ItemBasicName() {
System.out.println("Book번호: "+ itemNo);
System.out.println("Book제목: "+ title);
System.out.println("Book가격 : " + price);
}
}
package oop.ItemEx;
//자식3 클래스(출력정보 입력 클래스)
import java.util.Scanner;
public class MainTest {
public static void main(String[] args) {
Handler handler888 = new Handler(); //Handler를 생성해 handler888변수에 담음
handler888.ItemHandler(3); //handler888로 하위에 변수호출
while(true) {
System.out.println("1.구매할 CD정보 입력하세요.: ");
System.out.println("2.구매할 DVD정보 입력하세요.: ");
System.out.println("3.구매할 Book정보 입력하세요.: ");
System.out.println("4.구매목록을 출력합니다.");
System.out.println("5.구매 프로그램을 종료합니다.");
System.out.println(">>번호선택을 하세요.");
Scanner sc=new Scanner(System.in); //키보드객체 선언
int buy = sc.nextInt(); //키보드객체를 buy로 변수선언(하위에 변수로 컨트롤 목적)
switch(buy) {
case 1 : case 2: case 3: handler888.addItem(buy); break;
case 4 : handler888.showAllDate(); break;
case 5 :
System.out.println("프로그램을 종료합니다.");
return;
}
}
}
}
package oop.ItemEx;
//메도스(=함수)를 컨트롤 할 메소드
import java.util.Scanner;
public class Handler {
private Item[] myItems;
public int numOfItem;
public void ItemHandler(int num) {
myItems= new Item[num];
numOfItem=0;
}
private void addItemInfo(Item I) {
myItems[numOfItem++] = I;
}
public void addItem(int choice) {
String singer, trackNum, outDate, actor, runtime, outDate1, name, pageNum, outDate2;
Scanner scan= new Scanner(System.in);
System.out.println("아이템 번호: "); String itemNo = scan.nextLine();
System.out.println("아이템 제목: "); String title = scan.nextLine();
System.out.println("아이템 가격: "); String price = scan.nextLine();
if(choice==1) {
System.out.println("CD가수명: "); singer=scan.nextLine();
System.out.println("CD트렉번호: "); trackNum=scan.nextLine();
System.out.println("CD발매일: "); outDate=scan.nextLine();
addItemInfo(new CD(itemNo, title, price, singer, trackNum, outDate));
} else if(choice==2) {
System.out.println("DVD배우: ");actor=scan.nextLine();
System.out.println("DVD런타임: "); runtime=scan.nextLine();
System.out.println("DVD발매일: "); outDate1=scan.nextLine();
addItemInfo(new DVD(itemNo, title, price,actor, runtime, outDate1));
} else if(choice==3) {
System.out.println("Book책이름: "); name=scan.nextLine();
System.out.println("Book페이지수: "); pageNum=scan.nextLine();
System.out.println("Book발간일: "); outDate2= scan.nextLine();
addItemInfo(new Book(itemNo, title, price,name, pageNum, outDate2));
}
}
public void showAllDate() {
for(int i=0; i<myItems.length; i++) {
myItems[i].ItemBasicName();
}
}
}
결과
1.구매할 CD정보 입력하세요.:
2.구매할 DVD정보 입력하세요.:
3.구매할 Book정보 입력하세요.:
4.구매목록을 출력합니다.
5.구매 프로그램을 종료합니다.
>>번호선택을 하세요.
1
아이템 번호: CDD
아이템 제목: DSDS
아이템 가격: 2000
CD가수명: 룰라
CD트렉번호: 3030
CD발매일: 2023.12.12
1.구매할 CD정보 입력하세요.:
2.구매할 DVD정보 입력하세요.:
3.구매할 Book정보 입력하세요.:
4.구매목록을 출력합니다.
5.구매 프로그램을 종료합니다.
>>번호선택을 하세요.
2
아이템 번호: vdvdv
아이템 제목: sdsdsd
아이템 가격: dfqw
DVD배우: dqfq
DVD런타임: 200
DVD발매일: 2023.11.11
1.구매할 CD정보 입력하세요.:
2.구매할 DVD정보 입력하세요.:
3.구매할 Book정보 입력하세요.:
4.구매목록을 출력합니다.
5.구매 프로그램을 종료합니다.
>>번호선택을 하세요.
3
아이템 번호: ddd
아이템 제목: fff
아이템 가격: 300
Book책이름: ddffg
Book페이지수: 300
Book발간일: 2023.12.33
1.구매할 CD정보 입력하세요.:
2.구매할 DVD정보 입력하세요.:
3.구매할 Book정보 입력하세요.:
4.구매목록을 출력합니다.
5.구매 프로그램을 종료합니다.
>>번호선택을 하세요.
4
CD아이템번호 : CDD
CD제목 : DSDS
CD가격 : 2000
DVD아이템번호 : vdvdv
DVD제목 : sdsdsd
DVD가격 : dfqw
Book번호: ddd
Book제목: fff
Book가격 : 300
1.구매할 CD정보 입력하세요.:
2.구매할 DVD정보 입력하세요.:
3.구매할 Book정보 입력하세요.:
4.구매목록을 출력합니다.
5.구매 프로그램을 종료합니다.
>>번호선택을 하세요.
5
프로그램을 종료합니다.
## 상속구조의 final
- final 사용하면, 상속이 제한(다른 클래스에서 상속이 안됨)되는 특성이 있음.
- final로 선언된 메소드는 하위클래스에서 재정의(overriding)할 수 없음 --> 보안설계에서 메소드 변형 방지 차원.
ex) final int max_value = 100;
max_value = 200; --> 에러: 값을 변경할 수 없음
class Parent {
final void display() {
System.out.println("부모 클래스의 display 메서드");
}
}
class Child extends Parent {
// void display() { } // 주석 해제하면 에러 발생
}
class Parent {
final void display() {
System.out.println("부모 클래스의 display 메서드");
}
}
class Child extends Parent {
// void display() { } // 주석을 해제하면 에러 발생
}
final class FinalClass {
// class SubClass extends FinalClass { } // 주석을 해제하면 에러 발생
}
## Object
최상위 부모클래스. 모든 클래스는 암시적, 명시적으로 object 클래스를 상속함.
- object의 중요한 메소드
1. tostring
- 객체를 문자열로 표현하는 메서드. 기본적으로는 객체의 클래스 이름과 해시 코드를 반환.
public class MyClass {
public static void main(String[] args) {
MyClass obj = new MyClass();
System.out.println(obj.toString()); // MyClass@hashcode
}
}
(연습1) GoodStock, GoodStockTest 2개의 클래스에서 확인
package oop.basic;
public class GoodsStock {
String goodsCode;
int stockNum;
public GoodsStock(String goodsCode, int stockNum) {
this.goodsCode = goodsCode;
this.stockNum = stockNum;
}
// String타입의 변수는 toString 메소드가 자동호출 됨
// toString 메소드 오버라이딩
public String toString() { // toString으로 오버라이딩하면 편하게 출력문 생성 가능.
return "상품코드: " +goodsCode + ",재고수량" + stockNum; // String이므로 return 사용시 변수처럼 호출가능
}
}
package oop.basic;
public class GoodsStockTest {
public static void main(String[] args) {
GoodsStock goods = new GoodsStock("55555", 100);
System.out.println(goods);
결과 (화면출력은 항상 main 클래스에서 실행)
상품코드: 55555,재고수량100
(연습2) MessageTest(부모), MessageSende, EmailSender, SNSsender 클래스로 메세지 호출
//부모
package oop.message;
public class MessageSender {
String title;
String senderName;
public MessageSender(String title, String senderName) {
this.title=title;
this.senderName = senderName;
}
void sendMessage(String rec) {
}
}
//자식1
package oop.message;
public class SNSsender extends MessageSender{
String senderPhoneNo; //보내는 사람 번호 선언
String message; //보내는 사람 메세지 선언
public SNSsender(String title, String senderName, String senderPhoneNo, String message) {
super(title,senderName); //자식클래스는 변수선언 후, 반드시 부모클래스의 변수를 super()형태로 호출
this.senderPhoneNo = senderPhoneNo; //현재클래스의 변수를 선언
this.message = message; //현재클래스의 변수를 선언
}
//보내는 정보출력 메소드
void sendMessage(String rec) {
System.out.println("---------------------");
System.out.println("제목: "+title);
System.out.println("보내는사람: " + senderName);
System.out.println("전화번호: " + rec); // 수신번호
System.out.println("회신번호: " + senderPhoneNo);
System.out.println("메세지: " + message);
}
}
//자식2
package oop.message;
public class EmailSender extends MessageSender{
String emailAddr; //보내는 사람 번호
String emailBody;
public EmailSender(String title, String senderName, String emailAddr, String emailBody) {
super(title,senderName); //자식클래스는 변수선언 후, 반드시 부모클래스의 변수를 super()형태로 호출
this.emailAddr = emailAddr; //현재클래스의 변수를 선언
this.emailBody = emailBody; //현재클래스의 변수를 선언
}
void sendMessage(String rec) {
System.out.println("---------------------");
System.out.println("제목: "+title);
System.out.println("보내는사람: " + senderName + "이메일주소: " + emailAddr);
System.out.println("전화번호: " + rec); // 수신번호
System.out.println("회신번호: " + emailBody);
}
}
// 호출문
package oop.message;
public class MessageTest {
public static void main(String[] args) {
SNSsender obj1 = new SNSsender("생일을 축하합니다.", "고객센터", "1588-1588","10% 할인쿠폰 제공합니다." );
EmailSender obj2 = new EmailSender("생일을 축하합니다.","고객센터", "ddq@ddd.com","10% 할인쿠폰");
obj1.sendMessage("010-100-0101");
obj2.sendMessage("dafhk@naver.com");
obj1.sendMessage("010-121-1212");
}
}
결과
---------------------
제목: 생일을 축하합니다.
보내는사람: 고객센터
전화번호: 010-100-0101
회신번호: 1588-1588
메세지: 10% 할인쿠폰 제공합니다.
---------------------
제목: 생일을 축하합니다.
보내는사람: 고객센터이메일주소: ddq@ddd.com
전화번호: dafhk@naver.com
회신번호: 10% 할인쿠폰
---------------------
제목: 생일을 축하합니다.
보내는사람: 고객센터
전화번호: 010-121-1212
회신번호: 1588-1588
메세지: 10% 할인쿠폰 제공합니다.
728x90
반응형
LIST
'Java' 카테고리의 다른 글
[Eclips] Java - 상속 및 OOP 과제 (3) | 2023.12.17 |
---|---|
[Eclips] Java Class 7 - toString, 추상클래스(abstract), 인터페이스(interface) (0) | 2023.12.15 |
[Eclips] Java class 5 - package, import, getters & setters 함수, 생성자 함수. (0) | 2023.12.13 |
[Eclips] Java Class 5 - 매개변수, 오버로딩, 메소드 문제 및 정답 (0) | 2023.12.13 |
[Eclips] Java class 4 - 선언부, Method, signature, Overloading, windowbuilder 설치. (0) | 2023.12.12 |