nme.kr

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
프로그램: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 클래스 상속 ====+====클래스 상속 =====
  
 :wr:**Phone.java** : 부모 클래스 :wr:**Phone.java** : 부모 클래스
줄 172: 줄 172:
 </code> </code>
  
-==== 8.2 메서드 재정의 ====+====메서드 재정의 ====
 + 
 +**Car.java**
  
 <code java> <code java>
 +package chapter08;
  
-</code>+public class Car {
  
-<code java>+ String color; 
 + String name; 
 +  
 + public void go() { 
 + System.out.println("전진"); 
 +
 +  
 + void back() { 
 + System.out.println("후진"); 
 +
 +}
  
 </code> </code>
 +
 +**Taxi.java**
  
 <code java> <code java>
 +package chapter08;
 +
 +public class Taxi extends Car {
 +
 + public void go() {
 + System.out.println("미터기를 켜고 전진");
 + }
 +}
  
 </code> </code>
  
-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); 
 +  
 +
 +}
  
 </code> </code>
 +
 +===== 다형성 =====
 +
 +**Parent.java**
  
 <code java> <code java>
 +package chapter08.poly;
 +
 +public class Parent {
 +
 + String name;
 +
 + void walk() {
 + System.out.println("부모가 걷는다.");
 + }
 +
 + void run() {
 + System.out.println("부모가 달린다.");
 + }
 +
 +}
  
 </code> </code>
 +
 +**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("자식이 먹는다.");
 + }
 +}
  
 </code> </code>
 +
 +**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> </code>
  
 <code java> <code java>
 +package chapter08.poly;
  
-</code>+public class PolyEx2 {
  
 + public static void main(String[] args) {
 +
 + Parent p = new Child();
 +
 + p.run();
 +
 + // 자식클래스의 자료형으로 변환 (강제형변환)
 + Child c = (Child)p;
 + c.eat();
  
-<code java>+
 + 
 +}
  
 </code> </code>
 +
  
 <code java> <code java>
 +package chapter08.poly;
  
 +public class GraphicCard {
 +
 + int memory;
 +
 + public void process() {
 + System.out.println("그래픽 처리");
 + }
 +
 +}
 +                                                                                                                                                                                                                                                           
 </code> </code>
  
 <code java> <code java>
 +package chapter08.poly;
 +
 +public class Amd extends GraphicCard {
 +
 + public void process() {
 + System.out.println("AMD 그래픽 처리");
 + }
 +
 +}
  
 </code> </code>
  
-==== 8.4 상속관계에서 접근제한자 ==== 
  
 <code java> <code java>
 +package chapter08.poly;
 +
 +public class Nvidia extends GraphicCard {
 +
 + public void process() {
 + System.out.println("Nvidia 그래픽 처리");
 + }
 +
 +}
  
 </code> </code>
 +
 +:wr:<color #ff7f27>**매개변수의 다형성**</color>
  
 <code java> <code java>
 +package chapter08.poly;
 +
 +public class Game {
 +
 + void display(GraphicCard gc) {
 + gc.process();
 + }
 +
 +}
  
 </code> </code>
  
 <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> </code>
  
 <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());
 +
 + }
 +
 +}
  
 </code> </code>
  
-==== 8.5 추클래스 ====+====속관계에서 접근제한자 ===== 
 + 
 +Aclass
  
 <code java> <code java>
 +package chapter08.pkg1;
  
 +public class Aclass {
 +
 + protected String varA;
 + String varA2;
 +
 + protected void methodA() {
 + System.out.println("methodA");
 + }
 +
 + void methodA2() {
 + System.out.println("methodA2");
 + }
 +}
 </code> </code>
  
-==== 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 = "varA";
 + ac.varA2 = "varA2";
 + ac.methodA();
 + ac.methodA2();
 +
 + }
 +}
  
 </code> </code>
 +
 +Bclass
  
 <code java> <code java>
 +package chapter08.pkg2;
 +
 +import chapter08.pkg1.Aclass;
 +
 +public class Bclass {
 +
 + public void methodB() {
 + Aclass ac = new Aclass();
 + //ac.varA = "varA"; // 사용 불가
 + //ac.varA2 = "varA2"; // 사용 불가
 + //ac.methodA(); // 사용 불가
 + //ac.methodA2(); // 사용 불가
 + }
 +
 +}
  
 </code> </code>
  
 +CClass
 <code java> <code java>
 +package chapter08.pkg2;
 +
 +import chapter08.pkg1.Aclass;
 +
 +public class CClass extends Aclass {
 +
 + CClass() {
 + this.varA = "varA"; // 사용 가능
 + //this.varA2 = "varA2"; // 사용 불가
 + this.methodA(); // 사용 가능
 + //this.methodA2(); // 사용 불가
 + }
 +}
  
 </code> </code>
  
-==== 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=" + type + ", r=" + r + "]";
 + }
 +}
 +
 +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=" + type + ", width=" + width + ", height=" + height+"]";
 + }
 +
 +}
 +
 +public class ShapeEx {
 + public static void main(String[] args) {
 + Shape[] shapes = new Shape[2];
 + shapes[0] = new Circle(10);
 + shapes[1] = new Rectangle(5,5);
 + for(Shape s : shapes) {
 + System.out.println(s);
 + System.out.println("넓이:"+s.area()+" 둘레:"+s.length());
 + }
 + }
 +}
 </code> </code>
  
-==== 8.3 다형성 ====+===== 객체를 배열로 처리 =====
  
 +**Animal.java**
 <code java> <code java>
 +package chapter08;
  
-</code>+public class Animal {
  
-==== 8.4 상속관계에서 접근제한자 ====+ String type; 
 + String name; 
 +  
 + Animal(String type, String name) { 
 + this.type type; 
 + this.name name; 
 +
 +  
 + void sleep() { 
 + System.out.println(this.name +"은(는) 잠을 잔다."); 
 +
 +}
  
 +</code>
 +
 +**Eagle.java**
 <code java> <code java>
 +package chapter08;
 +
 +public class Eagle extends Animal {
 +
 + Eagle(String type, String name) {
 + super(type, name);
 + }
 +
 + void sleep() {
 + System.out.println(this.name +"은(는) 하늘에서 잠을 잔다.");
 + }
 +
 +
 +}
  
 </code> </code>
  
-==== 8.5 추상클래스 ====+**Tiger.java** 
 +<code java> 
 +package chapter08; 
 + 
 +public class Tiger extends Animal { 
 + 
 + Tiger(String type, String name) { 
 + super(type, name); 
 +
 +  
 + void sleep() { 
 + System.out.println(this.name +"은(는) 산속에서 잠을 잔다."); 
 +
 + 
 +  
 +
 + 
 +</code>
  
 +**Lion.java**
 <code java> <code java>
 +package chapter08;
 +
 +public class Lion extends Animal {
 +
 + Lion(String type, String name) {
 + super(type, name);
 + }
 +
 + void sleep() {
 + System.out.println(this.name +"은(는) 숲속에서 잠을 잔다.");
 + }
 +
 +
 +}
  
 </code> </code>
  
-==== 8.6 객체를 배열로 처리 ====+**Shark.java** 
 +<code java> 
 +package chapter08; 
 + 
 +public class Shark extends Animal { 
 + 
 + Shark(String type, String name) { 
 + super(type, name); 
 +
 +  
 + void sleep() { 
 + System.out.println(this.name +"은(는) 물속에서 잠을 잔다."); 
 +
 + 
 +  
 +
 + 
 +</code>
  
 +**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.length; i++) {
 + ani[i].sleep();
 + }
 + }
 +}
  
 </code> </code>
  
-==== 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("method() 재정의");
 + }
 +
 + /*
 + void finalMethod() { // 재정의 불가
 + System.out.println("finalMethod() 재정의");
 + }
 + */
 +}
 </code> </code>