문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
프로그램:java:ㄴhomework:book_source:ch08 [2022/01/04 14:14] clayeryan@gmail.com [8.1 클래스 상속] |
프로그램:java:ㄴhomework:book_source:ch08 [2023/07/13 17:29] (현재) clayeryan@gmail.com ↷ 문서가 programmer:java:ㄴhomework:book_source:ch08에서 프로그램:java:ㄴhomework:book_source:ch08(으)로 이동되었습니다 |
||
---|---|---|---|
줄 1: | 줄 1: | ||
- | ======Chaptor08 | + | ======Ch.08 상속====== |
- | ==== 8.1 클래스 상속 ==== | + | ===== 클래스 상속 |
: | : | ||
줄 172: | 줄 172: | ||
</ | </ | ||
- | ==== 8.2 메서드 재정의 ==== | + | ===== 메서드 재정의 ===== |
+ | |||
+ | **Car.java** | ||
<code java> | <code java> | ||
+ | package chapter08; | ||
- | </ | + | public class Car { |
- | <code java> | + | String color; |
+ | String name; | ||
+ | |||
+ | public void go() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | void back() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
</ | </ | ||
+ | |||
+ | **Taxi.java** | ||
<code java> | <code java> | ||
+ | package chapter08; | ||
+ | |||
+ | public class Taxi extends Car { | ||
+ | |||
+ | public void go() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
</ | </ | ||
- | 8.3 다형성 | + | **TaxiMain.java** |
<code java> | <code java> | ||
+ | package chapter08; | ||
- | </code> | + | public class TaxiMain { |
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | Taxi t = new Taxi(); | ||
+ | t.go(); | ||
+ | |||
+ | int a = 10; | ||
+ | double b = a; // 자동형변환 | ||
- | <code java> | + | double c = 10.5; |
+ | // int d = c; // 에러 | ||
+ | |||
+ | // | ||
+ | int d = (int)c; | ||
+ | |||
+ | System.out.println(b); | ||
+ | System.out.println(d); | ||
+ | |||
+ | } | ||
+ | } | ||
</ | </ | ||
+ | |||
+ | ===== 다형성 ===== | ||
+ | |||
+ | **Parent.java** | ||
<code java> | <code java> | ||
+ | package chapter08.poly; | ||
+ | |||
+ | public class Parent { | ||
+ | |||
+ | String name; | ||
+ | |||
+ | void walk() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | void run() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | } | ||
</ | </ | ||
+ | |||
+ | **Child.java** | ||
<code java> | <code java> | ||
+ | package chapter08.poly; | ||
+ | |||
+ | public class Child extends Parent { | ||
+ | |||
+ | String name; | ||
+ | |||
+ | // 재정의 메서드 | ||
+ | void run() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | // 추가된 메서드 | ||
+ | void eat() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
</ | </ | ||
+ | |||
+ | **PolyEx.java** | ||
<code java> | <code java> | ||
+ | package chapter08.poly; | ||
+ | |||
+ | public class PolyEx { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | Child c = new Child(); | ||
+ | |||
+ | c.run(); | ||
+ | |||
+ | // 부모클래스의 자료형으로 선언 (자동형변환) | ||
+ | Parent p = new Child(); | ||
+ | p.run(); // 재정이된 메서드가 실행 | ||
+ | // p.eat(); // 에러 | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
</ | </ | ||
<code java> | <code java> | ||
+ | package chapter08.poly; | ||
- | </ | + | public class PolyEx2 { |
+ | public static void main(String[] args) { | ||
+ | |||
+ | Parent p = new Child(); | ||
+ | |||
+ | p.run(); | ||
+ | |||
+ | // 자식클래스의 자료형으로 변환 (강제형변환) | ||
+ | Child c = (Child)p; | ||
+ | c.eat(); | ||
- | <code java> | + | } |
+ | |||
+ | } | ||
</ | </ | ||
+ | |||
<code java> | <code java> | ||
+ | package chapter08.poly; | ||
+ | public class GraphicCard { | ||
+ | |||
+ | int memory; | ||
+ | |||
+ | public void process() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
</ | </ | ||
<code java> | <code java> | ||
+ | package chapter08.poly; | ||
+ | |||
+ | public class Amd extends GraphicCard { | ||
+ | |||
+ | public void process() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | } | ||
</ | </ | ||
- | ==== 8.4 상속관계에서 접근제한자 ==== | ||
<code java> | <code java> | ||
+ | package chapter08.poly; | ||
+ | |||
+ | public class Nvidia extends GraphicCard { | ||
+ | |||
+ | public void process() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | } | ||
</ | </ | ||
+ | |||
+ | : | ||
<code java> | <code java> | ||
+ | package chapter08.poly; | ||
+ | |||
+ | public class Game { | ||
+ | |||
+ | void display(GraphicCard gc) { | ||
+ | gc.process(); | ||
+ | } | ||
+ | |||
+ | } | ||
</ | </ | ||
<code java> | <code java> | ||
+ | package chapter08.poly; | ||
+ | |||
+ | public class Computer2 { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | Game g = new Game(); | ||
+ | |||
+ | GraphicCard gc = new GraphicCard(); | ||
+ | g.display(gc); | ||
+ | |||
+ | Amd gc2 = new Amd(); | ||
+ | g.display(gc2); | ||
+ | |||
+ | Nvidia gc3 = new Nvidia(); | ||
+ | g.display(gc3); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
</ | </ | ||
<code java> | <code java> | ||
+ | package chapter08.poly; | ||
+ | |||
+ | public class ObjectEx { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | allObject(new GraphicCard()); | ||
+ | allObject(new Amd()); | ||
+ | allObject(new Nvidia()); | ||
+ | allObject(" | ||
+ | |||
+ | } | ||
+ | |||
+ | public static void allObject(Object obj) { | ||
+ | |||
+ | System.out.println(obj.toString()); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
</ | </ | ||
- | ==== 8.5 추상클래스 | + | ===== 상속관계에서 접근제한자 ===== |
+ | |||
+ | Aclass | ||
<code java> | <code java> | ||
+ | package chapter08.pkg1; | ||
+ | public class Aclass { | ||
+ | |||
+ | protected String varA; | ||
+ | String varA2; | ||
+ | |||
+ | protected void methodA() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | void methodA2() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
</ | </ | ||
- | ==== 8.6 객체를 배열로 처리 ==== | + | AclassMain |
<code java> | <code java> | ||
+ | package chapter08.pkg1; | ||
+ | |||
+ | public class AclassMain { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | Aclass ac = new Aclass(); | ||
+ | ac.varA = " | ||
+ | ac.varA2 = " | ||
+ | ac.methodA(); | ||
+ | ac.methodA2(); | ||
+ | |||
+ | } | ||
+ | } | ||
</ | </ | ||
+ | |||
+ | Bclass | ||
<code java> | <code java> | ||
+ | package chapter08.pkg2; | ||
+ | |||
+ | import chapter08.pkg1.Aclass; | ||
+ | |||
+ | public class Bclass { | ||
+ | |||
+ | public void methodB() { | ||
+ | Aclass ac = new Aclass(); | ||
+ | //ac.varA = " | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | } | ||
+ | |||
+ | } | ||
</ | </ | ||
+ | CClass | ||
<code java> | <code java> | ||
+ | package chapter08.pkg2; | ||
+ | |||
+ | import chapter08.pkg1.Aclass; | ||
+ | |||
+ | public class CClass extends Aclass { | ||
+ | |||
+ | CClass() { | ||
+ | this.varA = " | ||
+ | // | ||
+ | this.methodA(); | ||
+ | // | ||
+ | } | ||
+ | } | ||
</ | </ | ||
- | ==== 8.2 메서드 재정의 | + | ===== 추상클래스 |
+ | |||
+ | 접근제한자 abstract 리턴타입 메서드명(매개변수); | ||
<code java> | <code java> | ||
+ | package chapter08; | ||
+ | abstract class Shape { | ||
+ | String type; | ||
+ | Shape(String type) { | ||
+ | this.type = type; | ||
+ | } | ||
+ | abstract double area(); | ||
+ | abstract double length(); | ||
+ | } | ||
+ | class Circle extends Shape{ | ||
+ | int r; | ||
+ | Circle(int r) { | ||
+ | super(" | ||
+ | this.r = r; | ||
+ | } | ||
+ | @Override | ||
+ | double area() { | ||
+ | return r * r * Math.PI; | ||
+ | } | ||
+ | @Override | ||
+ | double length() { | ||
+ | return 2 * r * Math.PI; | ||
+ | } | ||
+ | @Override | ||
+ | public String toString() { | ||
+ | return "Shape [type=" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class Rectangle extends Shape { | ||
+ | int width, height; | ||
+ | Rectangle(int width, int height) { | ||
+ | super(" | ||
+ | this.width = width; | ||
+ | this.height = height; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | double area() { | ||
+ | return width * height; | ||
+ | } | ||
+ | @Override | ||
+ | double length() { | ||
+ | return 2 * (width + height); | ||
+ | } | ||
+ | @Override | ||
+ | public String toString() { | ||
+ | return "Shape [type=" | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | public class ShapeEx { | ||
+ | public static void main(String[] args) { | ||
+ | Shape[] shapes = new Shape[2]; | ||
+ | shapes[0] = new Circle(10); | ||
+ | shapes[1] = new Rectangle(5, | ||
+ | for(Shape s : shapes) { | ||
+ | System.out.println(s); | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
+ | } | ||
</ | </ | ||
- | ==== 8.3 다형성 | + | ===== 객체를 배열로 처리 ===== |
+ | **Animal.java** | ||
<code java> | <code java> | ||
+ | package chapter08; | ||
- | </ | + | public class Animal { |
- | ==== 8.4 상속관계에서 접근제한자 ==== | + | String type; |
+ | String name; | ||
+ | |||
+ | Animal(String type, String name) { | ||
+ | this.type | ||
+ | this.name | ||
+ | } | ||
+ | |||
+ | void sleep() { | ||
+ | System.out.println(this.name +" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | **Eagle.java** | ||
<code java> | <code java> | ||
+ | package chapter08; | ||
+ | |||
+ | public class Eagle extends Animal { | ||
+ | |||
+ | Eagle(String type, String name) { | ||
+ | super(type, | ||
+ | } | ||
+ | |||
+ | void sleep() { | ||
+ | System.out.println(this.name +" | ||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
</ | </ | ||
- | ==== 8.5 추상클래스 ==== | + | **Tiger.java** |
+ | <code java> | ||
+ | package chapter08; | ||
+ | |||
+ | public class Tiger extends Animal { | ||
+ | |||
+ | Tiger(String type, String name) { | ||
+ | super(type, | ||
+ | } | ||
+ | |||
+ | void sleep() { | ||
+ | System.out.println(this.name +" | ||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | **Lion.java** | ||
<code java> | <code java> | ||
+ | package chapter08; | ||
+ | |||
+ | public class Lion extends Animal { | ||
+ | |||
+ | Lion(String type, String name) { | ||
+ | super(type, | ||
+ | } | ||
+ | |||
+ | void sleep() { | ||
+ | System.out.println(this.name +" | ||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
</ | </ | ||
- | ==== 8.6 객체를 배열로 처리 ==== | + | **Shark.java** |
+ | <code java> | ||
+ | package chapter08; | ||
+ | |||
+ | public class Shark extends Animal { | ||
+ | |||
+ | Shark(String type, String name) { | ||
+ | super(type, | ||
+ | } | ||
+ | |||
+ | void sleep() { | ||
+ | System.out.println(this.name +" | ||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | **AnimalMain.java** | ||
<code java> | <code java> | ||
+ | package chapter08; | ||
+ | |||
+ | public class AnimalMain { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | Animal[] ani = new Animal[4]; | ||
+ | |||
+ | Animal eagle = new Eagle(" | ||
+ | Animal tiger = new Tiger(" | ||
+ | Animal lion = new Lion(" | ||
+ | Animal shark = new Shark(" | ||
+ | |||
+ | ani[0] = eagle; | ||
+ | ani[1] = tiger; | ||
+ | ani[2] = lion; | ||
+ | ani[3] = shark; | ||
+ | |||
+ | for (int i=0; i< | ||
+ | ani[i].sleep(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
</ | </ | ||
- | ==== 8.7 final 제어자 ==== | + | ===== final 제어자 ===== |
+ | |||
+ | public class SubClass extends String { // 사용불가 | ||
<code java> | <code java> | ||
+ | package chapter08; | ||
+ | public class FinalMethod { | ||
+ | |||
+ | // 재정의 가능한 메서드 | ||
+ | void method() { | ||
+ | |||
+ | } | ||
+ | |||
+ | // 재정의가 불가능한 메서드 | ||
+ | final void finalMethod() { | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | class SubFinalMethod extends FinalMethod { | ||
+ | |||
+ | void method() { // 재정의 가능 | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | /* | ||
+ | void finalMethod() { // 재정의 불가 | ||
+ | System.out.println(" | ||
+ | } | ||
+ | */ | ||
+ | } | ||
</ | </ | ||