문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
프로그램:java:ㄴhomework:book_source:ch08 [2022/01/04 12:51] clayeryan@gmail.com [8.1 클래스 상속] |
프로그램:java:ㄴhomework:book_source:ch08 [2025/06/27 16:07] (현재) |
||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| - | ======Chaptor08 | + | ======Ch.08 상속====== |
| - | ==== 8.1 클래스 상속 ==== | + | ===== 클래스 상속 |
| - | : | + | : |
| <code java> | <code java> | ||
| 줄 25: | 줄 25: | ||
| </ | </ | ||
| + | |||
| + | : | ||
| <code java> | <code java> | ||
| 줄 38: | 줄 40: | ||
| </ | </ | ||
| + | |||
| + | : | ||
| <code java> | <code java> | ||
| 줄 75: | 줄 79: | ||
| </ | </ | ||
| - | ==== 8.2 메서드 재정의 ==== | ||
| <code java> | <code java> | ||
| + | package chapter08; | ||
| + | public class SuperEx { | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | |||
| + | Child child = new Child(); | ||
| + | child.print(); | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | class Parent { | ||
| + | |||
| + | int number = 3; | ||
| + | |||
| + | Parent() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | class Child extends Parent { | ||
| + | |||
| + | //int number = 2; | ||
| + | |||
| + | Child() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | void print() { | ||
| + | int number = 1; | ||
| + | System.out.println(number); | ||
| + | System.out.println(this.number); | ||
| + | System.out.println(super.number); | ||
| + | |||
| + | } | ||
| + | } | ||
| </ | </ | ||
| - | ==== 8.3 다형성 ==== | + | <code java> |
| + | package chapter08; | ||
| + | |||
| + | public class Child extends Parent { | ||
| + | |||
| + | // int number | ||
| + | |||
| + | Child(){ | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | viod print() { | ||
| + | int number | ||
| + | System.out.println(number); | ||
| + | System.out.println(this.number); | ||
| + | System.out.println(super.number); | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | <color # | ||
| <code java> | <code java> | ||
| + | package chapter08; | ||
| + | public class SuperEx2 { | ||
| + | |||
| + | } | ||
| + | |||
| + | class Parent2 { | ||
| + | |||
| + | String name; | ||
| + | |||
| + | Parent2(String name) { | ||
| + | this.name = name; | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | class Child2 extends Parent2 { | ||
| + | |||
| + | Child2(String name) { | ||
| + | super(name); | ||
| + | } | ||
| + | |||
| + | } | ||
| </ | </ | ||
| - | ==== 8.4 상속관계에서 접근제한자 | + | ===== 메서드 재정의 |
| + | |||
| + | **Car.java** | ||
| <code java> | <code java> | ||
| + | package chapter08; | ||
| + | |||
| + | public class Car { | ||
| + | |||
| + | String color; | ||
| + | String name; | ||
| + | |||
| + | public void go() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | void back() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| </ | </ | ||
| - | ==== 8.5 추상클래스 ==== | + | **Taxi.java** |
| <code java> | <code java> | ||
| + | package chapter08; | ||
| + | |||
| + | public class Taxi extends Car { | ||
| + | |||
| + | public void go() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| </ | </ | ||
| - | ==== 8.6 객체를 배열로 처리 ==== | + | **TaxiMain.java** |
| <code java> | <code java> | ||
| + | package chapter08; | ||
| + | |||
| + | public class TaxiMain { | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | |||
| + | Taxi t = new Taxi(); | ||
| + | t.go(); | ||
| + | |||
| + | int a = 10; | ||
| + | double b = a; // 자동형변환 | ||
| + | |||
| + | double c = 10.5; | ||
| + | // int d = c; // 에러 | ||
| + | |||
| + | // | ||
| + | int d = (int)c; | ||
| + | |||
| + | System.out.println(b); | ||
| + | System.out.println(d); | ||
| + | |||
| + | } | ||
| + | } | ||
| </ | </ | ||
| - | ==== 8.7 final 제어자 | + | ===== 다형성 |
| + | |||
| + | **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> | ||
| + | package chapter08.poly; | ||
| + | |||
| + | public class Child extends Parent { | ||
| + | |||
| + | String name; | ||
| + | |||
| + | // 재정의 메서드 | ||
| + | void run() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | // 추가된 메서드 | ||
| + | void eat() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **PolyEx.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> | ||
| + | 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> | ||
| + | package chapter08.poly; | ||
| + | |||
| + | public class GraphicCard { | ||
| + | |||
| + | int memory; | ||
| + | |||
| + | public void process() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | <code java> | ||
| + | package chapter08.poly; | ||
| + | |||
| + | public class Amd extends GraphicCard { | ||
| + | |||
| + | public void process() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | <code java> | ||
| + | package chapter08.poly; | ||
| + | |||
| + | public class Nvidia extends GraphicCard { | ||
| + | |||
| + | public void process() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | : | ||
| + | |||
| + | <code java> | ||
| + | package chapter08.poly; | ||
| + | |||
| + | public class Game { | ||
| + | |||
| + | void display(GraphicCard gc) { | ||
| + | gc.process(); | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | <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> | ||
| + | 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()); | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== 상속관계에서 접근제한자 ===== | ||
| + | |||
| + | Aclass | ||
| + | |||
| + | <code java> | ||
| + | package chapter08.pkg1; | ||
| + | |||
| + | public class Aclass { | ||
| + | |||
| + | protected String varA; | ||
| + | String varA2; | ||
| + | |||
| + | protected void methodA() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | void methodA2() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | AclassMain | ||
| + | |||
| + | <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> | ||
| + | package chapter08.pkg2; | ||
| + | |||
| + | import chapter08.pkg1.Aclass; | ||
| + | |||
| + | public class Bclass { | ||
| + | |||
| + | public void methodB() { | ||
| + | Aclass ac = new Aclass(); | ||
| + | //ac.varA = " | ||
| + | // | ||
| + | // | ||
| + | // | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | CClass | ||
| + | <code java> | ||
| + | package chapter08.pkg2; | ||
| + | |||
| + | import chapter08.pkg1.Aclass; | ||
| + | |||
| + | public class CClass extends Aclass { | ||
| + | |||
| + | CClass() { | ||
| + | this.varA = " | ||
| + | // | ||
| + | this.methodA(); | ||
| + | // | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== 추상클래스 ===== | ||
| + | |||
| + | 접근제한자 abstract 리턴타입 메서드명(매개변수); | ||
| + | |||
| + | <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(" | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== 객체를 배열로 처리 ===== | ||
| + | |||
| + | **Animal.java** | ||
| + | <code java> | ||
| + | package chapter08; | ||
| + | |||
| + | public class Animal { | ||
| + | |||
| + | String type; | ||
| + | String name; | ||
| + | |||
| + | Animal(String type, String name) { | ||
| + | this.type = type; | ||
| + | this.name = name; | ||
| + | } | ||
| + | |||
| + | void sleep() { | ||
| + | System.out.println(this.name +" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **Eagle.java** | ||
| + | <code java> | ||
| + | package chapter08; | ||
| + | |||
| + | public class Eagle extends Animal { | ||
| + | |||
| + | Eagle(String type, String name) { | ||
| + | super(type, | ||
| + | } | ||
| + | |||
| + | void sleep() { | ||
| + | System.out.println(this.name +" | ||
| + | } | ||
| + | |||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **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> | ||
| + | package chapter08; | ||
| + | |||
| + | public class Lion extends Animal { | ||
| + | |||
| + | Lion(String type, String name) { | ||
| + | super(type, | ||
| + | } | ||
| + | |||
| + | void sleep() { | ||
| + | System.out.println(this.name +" | ||
| + | } | ||
| + | |||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **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> | ||
| + | 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(); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== final 제어자 ===== | ||
| + | |||
| + | public class SubClass extends String { // 사용불가 | ||
| + | |||
| + | <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(" | ||
| + | } | ||
| + | */ | ||
| + | } | ||
| </ | </ | ||
별도로 명시하지 않을 경우, 이 위키의 내용은 다음 라이선스에 따라 사용할 수 있습니다: CC Attribution-Share Alike 4.0 International