클래스를 재사용하는 객체지향 기능
-부모클래스의 모든 재산(속성,함수,생성자)을 물려받음
- 부모 클래스 : 범위가 넓은 의미의 클래스
- 상속, super()
- 자식 클래스 : 좁은 범위의 클래스
상속 사용법 : public calss 자식클래스명 extends 부모클래스{}
- 실행 클래스(main)
더보기
package chap07.sec01.exam01;
/**
* packageName : chap07.sec01.exam01
* fileName : People
* author : L.DH
* date : 2023-09-21
* description : 부모 클래스 / 상속, super()
* 요약 : 상속 : 클래스를 재사용하는 객체지향 기능,
* 말 그대로 부모클래스의 모든 재산(속성,함수,생성자)을 물려받음
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
/**
* 부모 클래스 : 범위가 넓은 의미의 클래스
*/
public class People {
// 속성
public String name; // 이름
public String ssn; // 주민번호
// 생성자
public People(String name, String ssn) {
this.name = name;
this.ssn = ssn;
}
}
더보기
package chap07.sec01.exam01;
/**
* packageName : chap07.sec01.exam01
* fileName : Student
* author : L.DH
* date : 2023-09-21
* description : 자식 클래스 : 좁은 범위의 클래스
* 요약 : 상속 사용법 : public calss 자식클래스명 extends 부모클래스{}
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class Student extends People {
// 속성
public int studentNo; //학번
// 생성자 studentNO, 부모 속성까지 모두 : alt + insert
public Student(String name, String ssn, int studentNo) {
super(name, ssn); // TODO : 부모의 매개변수 있는 생성자를 호출함
this.studentNo = studentNo;
}
}
더보기
package chap07.sec01.exam01;
/**
* packageName : chap07.sec01.exam01
* fileName : StudentApplication
* author : L.DH
* date : 2023-09-21
* description : 실행 클래스(main)
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class StudentApplication {
public static void main(String[] args) {
// 객체 생성 : 자식(Student)
Student student = new Student("홍길동", "123456-1234567", 1);
System.out.println("name : " + student.name); // 부모 속성
System.out.println("ssn : " + student.ssn); // 부모 속성
System.out.println("studentNo : " + student.studentNo); // 부모 속성
}
}
함수 = 메소드 재정의(오버라이딩), 자식 클래스
- @Override : 어노테이션(주석) => 자주 사용하는 함수(기능)를 간단히 적용한 것
오버라이딩(overriding) 함수 : alt + insert(자동화 기능 이용)
- 부모 함수 .areaCircle() VS 자식 함수 .areaCircle() (win)
※ 오버라이딩한 자식 함수가 우선이 되어 출력됨
원의 넓이를 구하는 함수
- 정밀하게 계산하고 싶으면 내장 함수 Math.PI(파이) 사용
더보기
package chap07.sec01.exam02;
/**
* packageName : chap07.sec01.exam02
* fileName : Calculator
* author : L.DH
* date : 2023-09-21
* description : 부모 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class Calculator {
// 속성, 생성자 생략
// 함수
/**
* 원의 넓이를 구하는 함수
*
* @param r
* @return
*/
double areaCircle(double r) {
System.out.println("Calculator 의 areaCircle 실행");
return 3.14 * r * r;
}
}
더보기
package chap07.sec01.exam02;
/**
* packageName : chap07.sec01.exam02
* fileName : Computer
* author : L.DH
* date : 2023-09-21
* description : 함수 재정의(오버라이딩), 자식 클래스
* 요약 :
* 함수 재정의 : (상속관계에서만 해당)
* 부모 자식 간에 함수 이름 같을 때 사용하는 것,
* 부모 함수를 사용하지 않고 같은 이름으로 자식의 함수를 사용하고자 할 때 활용함
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class Computer extends Calculator {
// TODO : 오버라이딩(overriding) 함수 : alt + insert(자동화 기능 이용)
// TODO : @Override : 어노테이션(주석) => 자주 사용하는 함수(기능)를 간단히 적용한 것
// => 기능 : 부모/자식 함수의 이름을 비교해서 이름이 틀리면 에러를 발생 시켜주는 어노테이션
@Override
double areaCircle(double r) {
System.out.println("Computer(자식) 객체의 areaCircle 실행");
return Math.PI * r * r; // 원의 넓이 // TODO : (정밀하게 계산하고 싶으면 내장 함수 Math.PI(파이) 사용)
}
}
더보기
package chap07.sec01.exam02;
/**
* packageName : chap07.sec01.exam02
* fileName : CalculatorApplication
* author : L.DH
* date : 2023-09-21
* description : 함수 = 메소드 재정의(오버라이딩)
* 요약 :
*
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class CalculatorApplication {
public static void main(String[] args) {
int r = 10; // 반지름
// 객체 생성 : 부모 : Calculator
Calculator calculator = new Calculator();
System.out.println("원면적 : " + calculator.areaCircle(r)); // 부모 함수 Calculator 의 areaCircle 실행
System.out.println("------------------------");
// 객체 생성 : 자식 : Computer
Computer computer = new Computer();
// TODO : 부모 함수 .areaCircle() VS 자식 함수 .areaCircle() (win)
// 결과 : 오버라이딩한 자식 함수가 우선이 되어 출력됨
System.out.println("원면적 : " + computer.areaCircle(r)); // Computer(자식) 객체의 areaCircle 실행
}
}
부모 클래스(공통속성, 공통함수) 사용
- 생성자 부모 .super 정의 없으면 매개변수 수기 작성
더보기
package chap07.sec01.exam04;
/**
* packageName : chap07.sec01.exam04
* fileName : CellPhone
* author : L.DH
* date : 2023-09-21
* description : 부모 클래스(공통속성, 공통함수)
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class CellPhone {
// 속성 : 공통속성(일반적인)
String model; // 휴대폰 기종(삼성, 애플)
String color; // 색깔
// 함수 : 기능
/**
* 전원 켜기 함수
*/
void powerOn() {
System.out.println("전원을 켭니다.");
}
/**
* 전원 끄기 함수
*/
void powerOff() {
System.out.println("전원을 끕니다.");
}
/**
* 벨을 울리는 함수
*/
void bell() {
System.out.println("벨이 울립니다.");
}
/**
* 통화기능 함수 : 보내는 기능(송신)
*/
void sendVoice(String message) {
System.out.println("나 : " + message);
}
/**
* 통화기능 함수 : 받는 기능(수신)
*/
void receiveVoice(String message) {
System.out.println("상대방 : " + message);
}
/**
* 전화 끊기 기능
*/
void hangUp() {
System.out.println("전화를 끊습니다.");
}
}
더보기
package chap07.sec01.exam04;
/**
* packageName : chap07.sec01.exam04
* fileName : DmbCellPhone
* author : L.DH
* date : 2023-09-21
* description : 자식 클래스 : tv 수긴 기능, 채널 기능
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class DmbCellPhone extends CellPhone {
// 속성
int channel; // tv 채널 속성
// 생성자 : 부모 + 자식 속성 모두 : alt + insert
public DmbCellPhone(String model, String color, int channel) { // 생성자 부모 .super 정의 없어서 매개변수 수기 작성
this.model = model; // 부모속성
this.color = color; // 부모속성
this.channel = channel; // 자식속성
}
// 전원켜기 / 끄기 등은 상속 받았으므로 정의할 필요 없음
// 함수
/**
* tv 수신하는 함수
*/
void turnOnDmb() {
System.out.println("채널 : " + channel + "번 방송을 시작합니다.");
}
/**
* 채널 돌리는 함수
*/
void changeChannelDmb(int channel) {
this.channel = channel;
System.out.println("채널 : " + channel + "번으로 돌립니다.");
}
/**
* tv 수신 멈추는 함수
*/
void turnOffDmb() {
System.out.println("DMB 방송 수신을 멈춥니다.");
}
}
더보기
package chap07.sec01.exam04;
/**
* packageName : chap07.sec01.exam04
* fileName : CellPhoneApplication
* author : L.DH
* date : 2023-09-21
* description : 실행 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class CellPhoneApplication {
public static void main(String[] args) {
// 객체 생성 : Dmb 폰 생성
DmbCellPhone dmbCellPhone = new DmbCellPhone("자바", "검정", 10);
System.out.println("모델 : " + dmbCellPhone.model); // 부모속성
System.out.println("컬러 : " + dmbCellPhone.color); // 부모속성
System.out.println("채널 : " + dmbCellPhone.channel); // 자식속성
// 전화 걸기
dmbCellPhone.turnOnDmb(); // 전원켜기
dmbCellPhone.bell(); // 통화음
dmbCellPhone.sendVoice("여보세요");
dmbCellPhone.receiveVoice("안녕하세요~ 반갑습니다.");
dmbCellPhone.hangUp(); // 전화 끊기
// tv 수신 : 자식 기능
dmbCellPhone.turnOnDmb(); // tv 켜기
dmbCellPhone.changeChannelDmb(12); // 채널 돌리기
dmbCellPhone.turnOffDmb(); // tv 끄기
}
}
부모 클래스
- final 클래스 : 상속 불가
자식 클래스
- 함수 재정의 : final void stop() : 재정의 안됨 : final 함수
더보기
package chap07.sec01.exam06;
/**
* packageName : chap07.sec01.exam06
* fileName : Car
* author : L.DH
* date : 2023-09-21
* description : 부모 클래스 final 함수
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class Car {
// 속성
public int speed; // 속도 속성
/**
* 속도 증가 함수
*/
public void speedUp() {
speed += 1;
}
/**
* final 함수
*/
public final void stop() {
System.out.println("차를 멈춤");
speed = 0;
}
}
더보기
package chap07.sec01.exam06;
/**
* packageName : chap07.sec01.exam06
* fileName : SportsCar
* author : L.DH
* date : 2023-09-21
* description : 자식 클래스
* 요약 : 함수 재정의 : final void stop() : 재정의 안됨 : final 함수
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class SportsCar extends Car {
// 함수(메소드) 재정의 : speedUp() : alt + insert
@Override
public void speedUp() {
speed += 10; // 스포츠카 속도
System.out.println(speed);
}
// TODO : 함수 재정의 : final void stop() : 재정의 안됨 : final 함수
}
연습문제) 부모 클래스 완성하기
더보기
package chap07.verify.exam01;
/**
* packageName : chap07.verify.exam01
* fileName : StudentApplication
* author : ds
* date : 2022-09-30
* description : 실행 클래스
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2022-09-30 ds 최초 생성
*/
// 문제 : 아래 자식 클래스 정보를 보고 부모 클래스를 완성하세요
// Person 클래스 완성하기
public class StudentApplication {
public static void main(String[] args) {
Student student = new Student();
student.set();
// 결과 출력
// age : 나이
// name : "홍길동"
// height : 175
// weight : 99
System.out.println("age : " + student.age);
System.out.println("name : " + student.name);
System.out.println("height : " + student.height);
System.out.println("weight : " + student.weight);
}
}
더보기
package chap07.verify.exam01;
/**
* packageName : chap07.verify.exam01
* fileName : Student
* author : ds
* date : 2022-09-30
* description : 자식 클래스
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2022-09-30 ds 최초 생성
*/
// 문제 : 아래 자식 클래스 정보를 보고 부모 클래스를 완성하세요
// Person 클래스 완성하기
public class Student extends Person {
void set() {
age = 30; // 부모속성
name = "홍길동"; // 부모속성
height = 175; // 부모속성
setWeight(99); // 부모함수 ( 세터 : alt+insert )
}
}
더보기
package chap07.verify.exam01;
/**
* packageName : chap07.verify.exam01
* fileName : Person
* author : L.DH
* date : 2023-09-21
* description : 연습문제) 부모 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class Person {
// 속성 정의
int age; // 나이
String name; // 이름
int height; // 키
int weight;
public void setWeight(int weight) {
this.weight = weight;
}
}
연습문제) 부모 클래스 완성하기
더보기
package chap07.verify.exam02;
/**
* packageName : chap07.verify.exam02
* fileName : ColorPointApplication
* author : ds
* date : 2022-09-30
* description : 실행 클래스
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2022-09-30 ds 최초 생성
*/
// 문제 : 아래 ColorPoint와 실행클래스를 보고
// 부모 클래스 Point를 완성하세요
// 결과 :
// red(3,4)
public class ColorPointApplication {
public static void main(String[] args) {
ColorPoint colorPoint = new ColorPoint();
colorPoint.set(3,4); // 부모 클래스의 함수 호출
colorPoint.setColor("red"); // 자식 클래스의 함수 호출 red
colorPoint.showColorPoint(); // 자식클래스의 함수 호출 (3,4)
}
}
더보기
package chap07.verify.exam02;
/**
* packageName : chap07.verify.exam02
* fileName : ColorPoint
* author : ds
* date : 2022-09-30
* description :
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2022-09-30 ds 최초 생성
*/
public class ColorPoint extends Point {
String color; // 점의 색
public void setColor(String color) {
this.color = color;
}
void showColorPoint() {
System.out.print(color); // 색깔 출력
showPoint(); // 부모 클래스의 함수 호출 (3,4)
}
}
더보기
package chap07.verify.exam02;
/**
* packageName : chap07.verify.exam02
* fileName : Point
* author : L.DH
* date : 2023-09-21
* description : 부모 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class Point {
// 속성
int x; // 3
int y; // 4
// 함수 : set(3, 4), showPoint()
void set(int x, int y) {
this.x = x;
this.y = y;
}
void showPoint(){
// red(3, 4)
System.out.println("(" + x +", " + y +")");
}
}
연습문제) 모델 클래스 객체 코딩하기
더보기
package chap07.verify.exam03;
/**
* packageName : chap07.verify.exam03
* fileName : PointApplication
* author : kangtaegyung
* date : 2023/03/30
* description :
* 요약 : 실행 클래스(main)
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023/03/30 kangtaegyung 최초 생성
*/
// 연습문제 2: 아래 실행 클래스를 보고 Point 객체를 코딩하세요.
// 속성의 변수명은 x, y 로 하세요
// 결과 :
// (0,0)
// (10,20)
public class PointApplication {
public static void main(String[] args) {
// 객체 생성
Point point = new Point(); // 기본생성자로 객체생성
point.showPoint(); // (0,0) 출력
// 객체 생성2
Point point2 = new Point(10,20); // 매개변수 2개짜리 생성자로 객체 생성
point2.showPoint(); // (10, 20) 출력
// 객체의 함수 호출
}
}
더보기
package chap07.verify.exam03;
/**
* packageName : chap07.verify.exam03
* fileName : Point
* author : L.DH
* date : 2023-09-21
* description : 연습문제) 모델 클래스 객체 코딩하기
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class Point {
// 속성
int x;
int y;
// 객체 생성
// 기본생성자
public Point() {
}
// 객체 생성2
// 매개변수 2개짜리 생성자 객체 생성
public Point(int x, int y) {
this.x = x;
this.y = y;
}
// 객체의 함수 호출
public void showPoint() {
System.out.println("(" + x + ", " + y + ")");
}
}
연습문제)모델 클래스 객체 디자인(코딩)
더보기
package chap07.verify.exam04;
/**
* packageName : chap07.verify.exam0102
* fileName : ComputerApplication
* author : kangtaegyung
* date : 2023/03/30
* description : 실행 클래스(main)
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023/03/30 kangtaegyung 최초 생성
*/
// 아래 샐행 결과를 보고 Computer 객체를 디자인(코딩)하세요
// 결과 :
// 전원을 켭니다.
// 화면을 켭니다.
// 타이핑을 합니다.
// 전원을 끕니다.
public class ComputerApplication {
public static void main(String[] args) {
Computer computer = new Computer();
computer.turnOn(); // "전원을 켭니다." 출력
computer.displayOn(); // "화면을 켭니다." 출력
computer.typeOn(); // "타이핑을 합니다." 출력
computer.turnOff(); // "전원을 끕니다." 출력
}
}
더보기
package chap07.verify.exam04;
/**
* packageName : chap07.verify.exam04
* fileName : Computer
* author : L.DH
* date : 2023-09-21
* description : 연습문제)모델 클래스 객체 디자인(코딩)
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class Computer {
// 객체 생성
public void turnOn(){
System.out.println("전원을 켭니다.");
}
public void displayOn(){
System.out.println("화면을 켭니다.");
}
public void typeOn(){
System.out.println("타이핑을 합니다.");
}
public void turnOff(){
System.out.println("전원을 끕니다.");
}
}
연습문제)모델 클래스 객체 디자인(코딩)
더보기
package chap07.verify.exam05;
/**
* packageName : chap07.verify.exam0103
* fileName : PororoApplication
* author : kangtaegyung
* date : 2023/03/30
* description : 실행 클래스(main)
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023/03/30 kangtaegyung 최초 생성
*/
// 문제 : 아래 실행 클래스를 보고 Penguin 객체를 코딩하세요
// 결과 :
// 뽀로로
// 남극
// 뽀로로 은 남극 살아요!!!!
public class PenguinApplication {
public static void main(String[] args) {
Penguin pororo = new Penguin();
pororo.setName("뽀로로"); // Setter
pororo.setHabitat("남극"); // Setter
System.out.println(pororo.getName()); // Getter
System.out.println(pororo.getHabitat()); // Getter
pororo.showInfo(); // 결과 : 뽀로로 은 남극 살아요!!!!
}
}
더보기
package chap07.verify.exam05;
/**
* packageName : chap07.verify.exam05
* fileName : Penguin
* author : L.DH
* date : 2023-09-21
* description : 연습문제)모델 클래스 객체 디자인(코딩)
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class Penguin {
// 속성
String name;
String habitat;
// 객체 생성
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHabitat() {
return habitat;
}
public void setHabitat(String habitat) {
this.habitat = habitat;
}
// 함수(메소드)
public void showInfo() {
System.out.println(name + " 온 " + habitat + " 살아요!!!!");
}
}
연습문제)자식 클래스 코딩
더보기
package chap07.verify.exam06;
/**
* packageName : chap07.verify.exam06
* fileName : StudentApplication
* author : kangtaegyung
* date : 2023/03/30
* description : 실행 클래스(main)
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023/03/30 kangtaegyung 최초 생성
*/
// 문제 : 실행클래스와 부모클래스 Person 을 보고 자식 클래스 Student 를 완성하세요
// 결과:
// 홍길동
// 1234567
public class StudentApplication {
public static void main(String[] args) {
Student student = new Student("홍길동");
student.setId("1234567"); // setter : 속성명 String id
System.out.println(student.getName()); // 홍길동
System.out.println(student.getId()); // 1234567
}
}
더보기
package chap07.verify.exam06;
/**
* packageName : chap07.verify.exam06
* fileName : Person
* author : kangtaegyung
* date : 2023/03/30
* description : 부모 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023/03/30 kangtaegyung 최초 생성
*/
public class Person {
String name;
public Person() {}
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
더보기
package chap07.verify.exam06;
/**
* packageName : chap07.verify.exam06
* fileName : Student
* author : L.DH
* date : 2023-09-21
* description : 연습문제)자식 클래스 코딩
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class Student extends Person {
// 속성
String id;
// 생성자
// 기본 생성자
public Student() {
}
// 생성자 : alt + insert
public Student(String name) {
super(name);
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
}
연습문제)자식 클래스 객체 디자인(코딩)
더보기
package chap07.verify.exam07;
/**
* packageName : chap07.verify.exam07
* fileName : PrinterApplicaton
* author : kangtaegyung
* date : 2023/03/30
* description : 실행 클래스(main)
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023/03/30 kangtaegyung 최초 생성
*/
// 문제 : 아래 실행클래스의 실행 결과와 부모클래스 Printer 객체를 확인하고,
// LaserPrinter 자식 객체를 디자인(코딩)하세요
// 결과 :
// 전원켜기
// 기본 프린터 입니다. 기본사양으로 프린팅합니다.
// 레이저프린터로 프린트합니다. 고급 사양으로 프린팅합니다.
// 전원끄기
public class PrinterApplicaton {
public static void main(String[] args) {
// 부모 객체 생성
Printer printer = new Printer();
printer.powerOn(); // "전원켜기"
printer.print(); // "기본 프린터 입니다. 기본사양으로 프린팅합니다."
// 자식 객체 생성
// TODO : print() 함수 재정의
LaserPrinter laserPrinter = new LaserPrinter();
laserPrinter.print(); // "레이저프린터로 프린트합니다. 고급 사양으로 프린팅합니다."
laserPrinter.powerOff(); // "전원끄기
}
}
더보기
package chap07.verify.exam07;
/**
* packageName : chap07.verify.exam07
* fileName : Printer
* author : kangtaegyung
* date : 2023/03/30
* description : 부모 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023/03/30 kangtaegyung 최초 생성
*/
public class Printer {
public void powerOn(){
System.out.println("전원켜기");
}
public void print() {
System.out.println("기본 프린터 입니다. 기본사양으로 프린팅합니다.");
};
public void powerOff(){
System.out.println("전원끄기");
}
}
더보기
package chap07.verify.exam07;
/**
* packageName : chap07.verify.exam07
* fileName : LaserPrinter
* author : L.DH
* date : 2023-09-21
* description : 연습문제)자식 클래스 객체 디자인(코딩)
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-21 L.DH 최초 생성
*/
public class LaserPrinter extends Printer {
// 함수(메소드)
@Override
public void print() {
System.out.println("레이저프린터로 프린트합니다. 고급 사양으로 프린팅합니다.");
}
}
다형성 코드 다형성 예제(필드의 다형성)
- 다형성 코드 : 부모 = 자식 (다형성 코드), 상속 관계에서만 가능
- 목적(장점) : 실행시에 사용방법은 동일하지만 다양한 객체를 이용해서 다양한 실행결과를 나오도록 코딩하고 싶을 때 사용함
- 기존 소스(As-Is 소스, 레가시 소스), 새로운 소스를 만들어서 계속 바꿔 끼움
- 부모 자료형 = 자식 자료형 : 자동 형변환(큰것 <- 작은것)
- 주의점 : 다형성을 이용해서 만든 객체에서 자식 고유의 함수를 사용하지 못함
- 단형성 코드 : 좌변 우변 동일
더보기
package chap07.sec02.exam01;
/**
* packageName : chap07.sec02.exam01
* fileName : ChildApplication
* author : L.DH
* date : 2023-09-22
* description : 실행 클래스 / 다형성 예제(필드의 다형성)
* 요약 : 다형성 코드 : 부모 = 자식 (다형성 코드), 상속 관계에서만 가능
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class ChildApplication {
public static void main(String[] args) {
// 다형성 코드 : 1)
// TODO : 단형성 코드 : 좌변 우변 동일
Child3 child3 = new Child3(); // child3 = 자식3 객체가 생성됨
child3.method2();
child3.method3();
// 다형성 코드 : 2) OK
// TODO : 부모 = 자식 (다형성 코드), 상속 관계에서만 가능
// 목적(장점) : 실행시에 사용방법은 동일하지만 다양한 객체를 이용해서
// 다양한 실행결과를 나오도록 코딩하고 싶을 때 사용함
// 기존 소스(As-Is 소스, 레가시 소스), 새로운 소스를 만들어서 계속 바꿔 끼움
// 부모 자료형 = 자식 자료형 : 자동 형변환(큰것 <- 작은것)
Parent parent2 = new Child3(); // 부모 parent2 = 자식3
parent2.method1();
parent2.method2(); // 부모 함수 (x) / 자식 함수 (o) : 함수 재정의
// TODO : 주의점 : 다형성을 이용해서 만든 객체(parent2) 에서 자식 고유의 함수를 사용하지 못함
// parent2.method3(); // 안됨(부모 쪽에 method3 함수가 없기 때문에 불러올 수가 없음)
}
}
더보기
package chap07.sec02.exam01;
/**
* packageName : chap07.sec02.exam01
* fileName : Parent
* author : L.DH
* date : 2023-09-22
* description : 부모 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Parent {
public void method1() {
System.out.println("부모 method1");
}
public void method2() {
System.out.println("부모 method2");
}
}
더보기
package chap07.sec02.exam01;
/**
* packageName : chap07.sec02.exam01
* fileName : Child
* author : L.DH
* date : 2023-09-22
* description : 자식1
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Child extends Parent {
@Override
public void method2() {
System.out.println("자식 method2");
}
}
더보기
package chap07.sec02.exam01;
/**
* packageName : chap07.sec02.exam01
* fileName : Child2
* author : L.DH
* date : 2023-09-22
* description : 자식2
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Child2 extends Parent {
@Override
public void method2() {
System.out.println("자식2 method2");
}
}
더보기
package chap07.sec02.exam01;
/**
* packageName : chap07.sec02.exam01
* fileName : Child3
* author : L.DH
* date : 2023-09-22
* description : 자식3
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Child3 extends Parent {
// method2() 오버라이딩 : alt + insert
@Override
public void method2() {
System.out.println( "자식3 method2" );
}
// 자식 3의 고유함수
public void method3() {
System.out.println( "자식3 method3" );
}
}
매개변수의(함수) 다형성
전략 클래스 : 디자인 패턴(23)_행위(11)_전략 패턴 1
- 정의 : drive(부모 클래스 부모객체) {} => drive(자식객체); (실행시에) => 부모 객체 = 자식 객체(형태)
- 매개변수의 다형성 이용 : 객체에 따라 결과가 달라짐
더보기
package chap07.sec02.exam02;
/**
* packageName : chap07.sec02.exam02
* fileName : DriverApplictaion
* author : L.DH
* date : 2023-09-22
* description : 실행 클래스 / 매개변수의(함수) 다형성
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class DriverApplictaion {
public static void main(String[] args) {
// 전략 클래스 : Driver(운전자) 객체 생성
Driver driver = new Driver();
// 자식 객체 : Bus, Taxi 생성
Bus bus = new Bus();
Taxi taxi = new Taxi();
// TODO : 매개변수의 다형성 이용 : 객체에 따라 결과가 달라짐
driver.drive(bus); // bus 자식 객체 ? // 결과 : 버스가 달립니다.
driver.drive(taxi); // bus 자식 객체 ? // 결과 : 택시가 달립니다.
}
}
더보기
package chap07.sec02.exam02;
/**
* packageName : chap07.sec02.exam02
* fileName : Driver
* author : L.DH
* date : 2023-09-22
* description : 전략 클래스 : 디자인 패턴(23)_행위(11)_전략 패턴 1
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Driver {
// TODO : 부모 객체 = 자식 객체(다형성)
// 정의 : drive(부모 클래스 부모객체) {} => drive(자식객체); (실행시에)
// => 부모 객체 = 자식 객체(형태)
public void drive(Vehicle vehicle) {
vehicle.run(); // 부모 클래스의 run() 실행 : 오버라이딩에 의해 자식 run() 실행됨
}
}
더보기
package chap07.sec02.exam02;
/**
* packageName : chap07.sec02.exam02
* fileName : Vehicle
* author : L.DH
* date : 2023-09-22
* description : 부모 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Vehicle {
public void run() {
System.out.println("차량이 달립니다.");
}
}
더보기
package chap07.sec02.exam02;
/**
* packageName : chap07.sec02.exam02
* fileName : Bus
* author : L.DH
* date : 2023-09-22
* description : 버스 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Bus extends Vehicle {
// run() 오버라이딩하세요 : alt + insert : "버스가 달립니다."
@Override
public void run() {
System.out.println("버스가 달립니다.");
}
}
더보기
package chap07.sec02.exam02;
/**
* packageName : chap07.sec02.exam02
* fileName : Taxi
* author : L.DH
* date : 2023-09-22
* description : 택시 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Taxi extends Vehicle {
// run() 오버라이딩하세요 : alt + insert : "택시가 달립니다."
@Override
public void run() {
System.out.println("택시가 달립니다.");
}
}
강제형변환해서 자식 객체로 원복
- (작은것(자식) -> 큰것(부모) : 자동), (큰것(부모) -> 작은것(자식) : 수동)
더보기
package chap07.sec02.exam03;
/**
* packageName : chap07.sec02.exam03
* fileName : ChildApplication
* author : L.DH
* date : 2023-09-22
* description : 실행 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class ChildApplication {
public static void main(String[] args) {
// 다형성 이용 객체 생성
// TODO : 부모 객체 = 자식 객체
// 부모클래스 객체변수 = new 자식생성자();
Parent parent = new Child();
parent.field1 = "data1";
parent.method1();
parent.method2();
// TODO : 자식의(child) 고유함수 사용못함
// parent.method3(); // x
// 예제 1) 위에서 다형성을 이용했는데 부득이하게 지식함수와 속성을 사용할 일이 생겼음
// TODO : 강제형변환해서 자식 객체로 원복
Child child = (Child) parent; // TODO : (작은것(자식) -> 큰것(부모) : 자동), (큰것(부모) -> 작은것(자식) : 수동)
child.field2 = "data2"; // 고유 속성 사용
child.method3(); // 고유 함수 실행
}
}
더보기
package chap07.sec02.exam03;
/**
* packageName : chap07.sec02.exam03
* fileName : Parent
* author : L.DH
* date : 2023-09-22
* description : 부모 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Parent {
public String field1;
public void method1() {
System.out.println("부모 함수1");
}
public void method2() {
System.out.println("부모 함수2");
}
}
더보기
package chap07.sec02.exam03;
/**
* packageName : chap07.sec02.exam03
* fileName : Child
* author : L.DH
* date : 2023-09-22
* description : 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Child extends Parent {
public String field2;
public void method3() {
System.out.println("자식 함수3");
}
}
instanceOf 연산자
- 목적 : 객체가 자식 클래스인지 확인하는 용도
- 사용법 : 부모객체 instanceOf 자식 클래스
더보기
package chap07.sec02.exam04;
/**
* packageName : chap07.sec02.exam04
* fileName : ChildApplication
* author : L.DH
* date : 2023-09-22
* description : 실행 클래스, instanceOf 연산자
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class ChildApplication {
// 정적(공유, 전역) 함수
public static void method1(Parent parent) {
// TODO : 사용법 : 부모객체 instanceOf 자식 클래스
// 목적 : 객체가 자식 클래스인지 확인하는 용도
if (parent instanceof Child) {
// 강제 형변환 실시 : 자식 객체 원본(큰것(자식) -> 작은것(부모) : 수동)
Child child = (Child) parent;
System.out.println("강제형변환 성공");
} else {
System.out.println("강제형변환 실패");
}
}
public static void main(String[] args) {
// 다형성 이용 객체 생성
Parent parent = new Child();
method1(parent); // 자식객체 들어간 부모객체를 전달
}
}
더보기
package chap07.sec02.exam04;
/**
* packageName : chap07.sec02.exam04
* fileName : Parent
* author : L.DH
* date : 2023-09-22
* description : 부모 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Parent {
}
더보기
package chap07.sec02.exam04;
/**
* packageName : chap07.sec02.exam04
* fileName : Child
* author : L.DH
* date : 2023-09-22
* description : 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Child extends Parent {
}
추상 클래스
- 활용 : 자식 클래스를 만들어서 상속받아 사용해야함
- 목적 : 프로젝트에서 개발자 많을 떄 함수이름과 속성이름을 통일시킬 목적으로 사용함
- 사용법 : public abstract class 클래스명
더보기
package chap07.sec03.exam01;
/**
* packageName : chap07.sec03.exam01
* fileName : SmartPhoneApplication
* author : L.DH
* date : 2023-09-22
* description : 실행 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class SmartPhoneApplication {
public static void main(String[] args) {
// 객체 생성
// TODO : Phone 추상클래스 : 생성 못함
// Phone phone = new Phone("홍길동");
SmartPhone smartPhone = new SmartPhone("홍길동");
// TODO : 활용 : 자식 클래스를 만들어서 상속받아 사용해야함
// TODO : 목적 : 프로젝트에서 개발자 많을 떄 함수이름과 속성이름을 통일시킬 목적으로 사용함
smartPhone.turnOn(); // 전원켜기
smartPhone.internetSearch(); // 인터넷 검색
smartPhone.turnOff(); // 전원끄기
}
}
더보기
package chap07.sec03.exam01;
/**
* packageName : chap07
* fileName : Phone
* author : L.DH
* date : 2023-09-22
* description : 추상 클래스
* 요약 : public abstract class 클래스명
* 활용 : 자식 클래스를 만들어서 상속받아 사용해야함
* 목적 : 프로젝트에서 개발자 많을 떄 함수이름과 속성이름을 통일시킬 목적으로 사용함
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public abstract class Phone {
public String owner;
// 매개 1개짜리 생성자 : alt + insert
public Phone(String owner) {
this.owner = owner;
}
// 전원 키는 함수
public void turnOn() {
System.out.println("폰 전원을 켭니다.");
}
// 전원 끄는 함수
public void turnOff() {
System.out.println("폰 전원을 끕니다.");
}
}
더보기
package chap07.sec03.exam01;
/**
* packageName : chap07.sec03.exam01
* fileName : SmartPhone
* author : L.DH
* date : 2023-09-22
* description :
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class SmartPhone extends Phone{
// 생성자 : alt + insert
public SmartPhone(String owner) {
super(owner);
}
public void internetSearch() {
System.out.println("인터넷 검색을 합니다.");
}
}
추상클래스 / 추상함수(메소드) 만들기
- 사용법 : 접근제한자 abstract 리턴자료형 함수명();
- 함수의 선언부(정의부)만 있고, 실행블럭 {} 이 없음
- 특징 : 자식클래스에서 무조건 오버라이딩 함수를 만들어야함
더보기
package chap07.sec03.exam02;
/**
* packageName : chap07.sec03.exam02
* fileName : Animal
* author : L.DH
* date : 2023-09-22
* description : 추상클래스 / 추상함수(메소드)
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public abstract class Animal {
public String kind; // 종류(종)
public void breathe() {
System.out.println("숨을 쉽니다.");
}
// TODO: 추상 함수 만들기
// 사용법 : 접근제한자 abstract 리턴자료형 함수명();
// 함수의 선언부(정의부)만 있고, 실행블럭 {} 이 없음
// 특징 : 자식클래스에서 무조건 오버라이딩 함수를 만들어야함
public abstract void sound();
}
더보기
package chap07.sec03.exam02;
/**
* packageName : chap07.sec03.exam02
* fileName : AnimalApplication
* author : L.DH
* date : 2023-09-22
* description : 실행 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class AnimalApplication {
public static void main(String[] args) {
// 자식 객체
Dog dog = new Dog(); // 멍멍
Cat cat = new Cat(); // 야옹
dog.sound();
cat.sound();
System.out.println("------------------------------");
// TODO : 2) 사용목적 : 다형성 이용
// 사용법 : 부모 객체 = new 자식생성자()
Animal animal = new Dog();
animal.sound(); // 멍멍
animal = new Cat();
animal.sound(); // 야옹
}
}
더보기
package chap07.sec03.exam02;
/**
* packageName : chap07.sec03.exam02
* fileName : Cat
* author : L.DH
* date : 2023-09-22
* description : 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Cat extends Animal {
// 생성자 : alt + insert
public Cat() {
this.kind = "포유류";
}
// 재정의 함수 제작 : alt + insert
// TODO : 메소드 구현(구현할 메서드 선택) : 필수적으로 재정의를 해야할 함수를 알려줌
@Override
public void sound() {
System.out.println("야옹");
}
}
더보기
package chap07.sec03.exam02;
/**
* packageName : chap07.sec03.exam02
* fileName : Dog
* author : L.DH
* date : 2023-09-22
* description : 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Dog extends Animal {
// 생성자
public Dog() {
this.kind = "포유류";
}
// 재정의 함수 제작 : alt + insert
@Override
public void sound() {
System.out.println("멍멍");
}
}
연습문제) 다형성 디자인(코딩)
더보기
package chap07.verify.exam08;
/**
* packageName : chap07.verify.exam08
* fileName : CalculatorApplication
* author : ds
* date : 2022-09-30
* description : 실행 클래스, 연습문제) 다형성
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2022-09-30 ds 최초 생성
*/
// 문제 : 실행 클래스의 결과와 Calculator(추상클래스)를 확인해서
// 자식 클래스 GoodCalc 디자인(코딩)하세요.
// 결과 :
// 5
// -1
// 3.0
public class CalculatorApplication {
public static void main(String[] args) {
GoodCalc goodCalc = new GoodCalc();
System.out.println(goodCalc.add(2,3));
System.out.println(goodCalc.subtract(2,3));
System.out.println(goodCalc.average(new int[]{2,3,4}));
}
}
더보기
package chap07.verify.exam08;
/**
* packageName : chap07.verify.exam08
* fileName : Calculator
* author : ds
* date : 2022-09-30
* description : 추상 클래스
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2022-09-30 ds 최초 생성
*/
public abstract class Calculator {
// 두 정수의 합을 구하여 리턴
public abstract int add(int a, int b);
// 두 정수의 차를 구하여 리턴
public abstract int subtract(int a, int b);
// 배열에 저장된 정수의 평균을 구해 실수로 리턴
public abstract double average(int[] a);
}
더보기
package chap07.verify.exam08;
/**
* packageName : chap07.verify.exam08
* fileName : GoodCalc
* author : L.DH
* date : 2023-09-22
* description : 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class GoodCalc extends Calculator {
// 함수(메소드)
@Override
public int add(int a, int b) {
return a + b;
}
@Override
public int subtract(int a, int b) {
return a - b;
}
@Override
public double average(int[] a) {
double sum = 0;
for (int i = 0; i < a.length; i++) {
sum = sum + a[i];
}
return (double) sum / (double) a.length;
}
}
연습문제) 다형성 디자인(코딩)
더보기
package chap07.verify.exam09;
/**
* packageName : chap07.verify.exam09
* fileName : PrinterApplication
* author : kangtaegyung
* date : 2023/03/30
* description : 연습문제) 다형성
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023/03/30 kangtaegyung 최초 생성
*/
// 문제 : 아래문제는 속성의 다형성을 이용해서 실행시점에 동적으로 결과를 변경하고 있다.
// 부모인 Printer 객체를 확인하고,
// LaserPrinter 와 ColorPrint 객체를 디자인(코딩) 하세요
// 결과 :
// 전원켜기
// 기본 프린터 입니다. 기본사양으로 프린팅합니다.
// 레이저프린터로 업그레이드 했습니다.
// 컬러프린터로 업그레이드 했습니다.
// 전원끄기
public class PrinterApplication {
public static void main(String[] args) {
// 부모 객체 생성
Printer printer = new Printer();
printer.powerOn(); // "전원켜기"
printer.print(); // "기본 프린터 입니다. 기본사양으로 프린팅합니다."
// 속성의 다형성 이용 : 레이저 프린터로 변경
printer = new LaserPrinter();
printer.print(); // "레이저프린터로 업그레이드 했습니다."
// 속성의 다형성 이용 : 컬러 프린터로 변경
printer = new ColorPrinter();
printer.print(); // "컬러프린터로 업그레이드 했습니다."
printer.powerOff(); // "전원끄기
}
}
더보기
package chap07.verify.exam09;
/**
* packageName : chap07.verify.exam09
* fileName : Printer
* author : kangtaegyung
* date : 2023/03/30
* description :
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023/03/30 kangtaegyung 최초 생성
*/
public class Printer {
public void powerOn(){
System.out.println("전원켜기");
}
public void print() {
System.out.println("기본 프린터 입니다. 기본사양으로 프린팅합니다.");
};
public void powerOff(){
System.out.println("전원끄기");
}
}
더보기
package chap07.verify.exam09;
/**
* packageName : chap07.verify.exam09
* fileName : LaserPrinter
* author : L.DH
* date : 2023-09-22
* description :
* 요약 : 자식 클래스
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class LaserPrinter extends Printer {
@Override
public void print() {
System.out.println("레이저프린터로 업그레이드 했습니다.");
}
}
더보기
package chap07.verify.exam09;
/**
* packageName : chap07.verify.exam09
* fileName : ColorPrinter
* author : L.DH
* date : 2023-09-22
* description :
* 요약 : 자식 클래스
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class ColorPrinter extends Printer {
@Override
public void print() {
System.out.println("컬러프린터로 업그레이드 했습니다.");
}
}
연습문제)다형성(매개변수) 디자인 코딩
더보기
package chap07.verify.exam10;
/**
* packageName : chap07.verify.exam10
* fileName : MethodApplication
* author : ds
* date : 2022-09-30
* description : 실행 클래스, 연습문제)다형성(매개변수) 디자인 코딩
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2022-09-30 ds 최초 생성
*/
// 문제 : 아래는 매개변수의 다형성을 이용한 예제입니다.
// 아래 소스를 보고 자식 클래스들을 완성하세요
// 결과 :
// Line
// Shape
// Rect
// Circle
public class MethodApplication {
static void paint(Shape p) {
p.draw();
}
public static void main(String[] args) {
Shape shape = new Shape();
MethodApplication.paint(shape); // Shape의 draw() 실행. "Shape" 출력
MethodApplication.paint(new Line()); // Shape의 draw() 실행. "Line" 출력
MethodApplication.paint(new Rect()); // Rect의 draw() 실행. "Rect" 출력
MethodApplication.paint(new Circle()); // Circle의 draw() 실행. "Circle" 출력
// 자바의 객체 배열
// Shape[] shapes = new Shape[]{new Line(), new Shape(),new Rect(),new Circle() };
//
// for(Shape shape : shapes) {
// paint(shape);
// }
}
}
더보기
package chap07.verify.exam10;
/**
* packageName : chap07.verify.exam10
* fileName : Shape
* author : ds
* date : 2022-09-30
* description : 부모 클래스
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2022-09-30 ds 최초 생성
*/
public class Shape {
public void draw() {
System.out.println("Shape");
}
}
더보기
package chap07.verify.exam10;
/**
* packageName : chap07.verify.exam10
* fileName : Line
* author : L.DH
* date : 2023-09-22
* description : 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Line extends Shape {
@Override
public void draw() {
System.out.println("Line");
}
}
더보기
package chap07.verify.exam10;
/**
* packageName : chap07.verify.exam10
* fileName : Rect
* author : L.DH
* date : 2023-09-22
* description : 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Rect extends Shape {
@Override
public void draw() {
System.out.println("Rect");
}
}
더보기
package chap07.verify.exam10;
/**
* packageName : chap07.verify.exam10
* fileName : Circle
* author : L.DH
* date : 2023-09-22
* description : 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Circle extends Shape {
@Override
public void draw() {
System.out.println("Circle");
}
}
연습문제)다형성 리턴 값이 있는 함수 만들기
더보기
package chap07.verify.exam11;
/**
* packageName : chap07.verify.exam05
* fileName : OverridingApplication
* author : ds
* date : 2022-09-30
* description : 연습문제)다형성 리턴 값이 있는 함수 만들기
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2022-09-30 ds 최초 생성
*/
// 문제 : 다형성을 이용한 예제, 아래 클래스를 보고 Weapon(부모클래스) 클래스와
// Cannon(자식클래스) 클래스를 완성하세요.
// 결과 :
// 기본 무기의 살상 능력은 1
// 대포의 살상 능력은 10
public class OverridingApplication {
public static void main(String[] args) {
// TODO : weapon.fire() : 리턴 값이 있는 함수
Weapon weapon = new Weapon();
System.out.println("기본 무기의 살상 능력은 " + weapon.fire());
weapon = new Cannon();
System.out.println("대포의 살상 능력은 " + weapon.fire());
}
}
더보기
package chap07.verify.exam11;
/**
* packageName : chap07.verify.exam11
* fileName : Weapon
* author : L.DH
* date : 2023-09-22
* description : 부모 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Weapon {
public int fire() {
return 1;
}
}
더보기
package chap07.verify.exam11;
/**
* packageName : chap07.verify.exam11
* fileName : Cannon
* author : L.DH
* date : 2023-09-22
* description : 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class Cannon extends Weapon {
@Override
public int fire() {
return 10;
}
}
연습문제)추상 클래스 다형성 디자인 코딩
더보기
package chap07.verify.exam12;
/**
* packageName : chap07.verify.exam12
* fileName : NoteBookApplication
* author : kangtaegyung
* date : 2023/03/30
* description : 연습문제)다형성 디자인 코딩
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023/03/30 kangtaegyung 최초 생성
*/
// 문제 : 아래 실행클래스의 실행결과와 추상 클래스의 Computer 객체를 보고
// DeskTop , NoteBook 객체를 디자인(코딩) 하세요
// 결과 :
// 전원을 켭니다.
// DeskTop Display()
// DeskTop Typing()
// NoteBook Display()
// NoteBook Typing()
// 전원을 끕니다.
public class NoteBookApplication {
public static void main(String[] args) {
Computer computer = new DeskTop();
computer.turnOn(); // "전원을 켭니다."
computer.display(); // "DeskTop Display()"
computer.typing(); // "DeskTop Typing()"
computer = new NoteBook(); // 데스크탑 -> 노트북으로 변경
computer.display(); // "NoteBook Display()"
computer.typing(); // NoteBook Typing()
computer.turnOff(); // "전원을 끕니다."
}
}
더보기
package chap07.verify.exam12;
/**
* packageName : chap07.verify.exam12
* fileName : Computer
* author : kangtaegyung
* date : 2023/03/30
* description : 추상 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* 2023/03/30 kangtaegyung 최초 생성
*/
public abstract class Computer {
public abstract void display();
public abstract void typing();
public void turnOn()
{
System.out.println("전원을 켭니다.");
}
public void turnOff()
{
System.out.println("전원을 끕니다.");
}
}
더보기
package chap07.verify.exam12;
/**
* packageName : chap07.verify.exam12
* fileName : DeskTop
* author : L.DH
* date : 2023-09-22
* description : 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class DeskTop extends Computer {
@Override
public void display() {
System.out.println("DeskTop Display()");
}
@Override
public void typing() {
System.out.println("DeskTop Typing()");
}
}
더보기
package chap07.verify.exam12;
/**
* packageName : chap07.verify.exam12
* fileName : NoteBook
* author : L.DH
* date : 2023-09-22
* description : 자식 클래스
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* ———————————————————————————————————————————————————————————
* 2023-09-22 L.DH 최초 생성
*/
public class NoteBook extends Computer {
@Override
public void display() {
System.out.println("NoteBook Display()");
}
@Override
public void typing() {
System.out.println("NoteBook Typing()");
}
}
'Java' 카테고리의 다른 글
[Java] chapter_10 (0) | 2023.09.25 |
---|---|
[Java] chapter_08 (0) | 2023.09.22 |
[Java] chapter_06 (0) | 2023.09.20 |
[Java] chapter_04 ~ 05 (0) | 2023.09.19 |
[Java] chapter_01 ~ 03 (0) | 2023.09.18 |