문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
프로그램:java:ㄴhomework:book_source:ch08 [2022/01/04 10:40] clayeryan@gmail.com |
프로그램: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 상속====== |
+ | |||
+ | ===== 클래스 상속 ===== | ||
+ | |||
+ | : | ||
+ | |||
+ | <code java> | ||
+ | package chapter08; | ||
+ | |||
+ | public class Phone { | ||
+ | |||
+ | String name; | ||
+ | String color; | ||
+ | String company; | ||
+ | |||
+ | void call() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | void receive() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | : | ||
+ | |||
+ | <code java> | ||
+ | package chapter08; | ||
+ | |||
+ | public class SmartPhone extends Phone { | ||
+ | |||
+ | public void installApp() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | : | ||
+ | |||
+ | <code java> | ||
+ | package chapter08; | ||
+ | |||
+ | public class SmartPhoneMain { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | Phone p = new Phone(); | ||
+ | p.name = " | ||
+ | p.company = " | ||
+ | p.color = " | ||
+ | |||
+ | System.out.println(" | ||
+ | System.out.println(p.name); | ||
+ | System.out.println(p.company); | ||
+ | System.out.println(p.color); | ||
+ | p.call(); | ||
+ | p.receive(); | ||
+ | |||
+ | SmartPhone sp = new SmartPhone(); | ||
+ | sp.name = " | ||
+ | sp.company = " | ||
+ | sp.color = " | ||
+ | |||
+ | System.out.println(" | ||
+ | System.out.println(sp.name); | ||
+ | System.out.println(sp.company); | ||
+ | System.out.println(sp.color); | ||
+ | sp.call(); | ||
+ | sp.receive(); | ||
+ | sp.installApp(); | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | <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); | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | package chapter08; | ||
+ | |||
+ | public class Child extends Parent { | ||
+ | |||
+ | // int number = 2; | ||
+ | |||
+ | Child(){ | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | viod print() { | ||
+ | int number = 1; | ||
+ | System.out.println(number); | ||
+ | System.out.println(this.number); | ||
+ | System.out.println(super.number); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | <color # | ||
+ | |||
+ | <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); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== 메서드 재정의 ===== | ||
+ | |||
+ | **Car.java** | ||
+ | |||
+ | <code java> | ||
+ | package chapter08; | ||
+ | |||
+ | public class Car { | ||
+ | |||
+ | String color; | ||
+ | String name; | ||
+ | |||
+ | public void go() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | |||
+ | void back() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | **Taxi.java** | ||
+ | |||
+ | <code java> | ||
+ | package chapter08; | ||
+ | |||
+ | public class Taxi extends Car { | ||
+ | |||
+ | public void go() { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | **TaxiMain.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); | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== 다형성 ===== | ||
+ | |||
+ | **Parent.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(" | ||
+ | } | ||
+ | */ | ||
+ | } | ||
+ | </ |