nme.kr

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
프로그램: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 상속====== 
 + 
 +===== 클래스 상속 ===== 
 + 
 +:wr:**Phone.java** : 부모 클래스 
 + 
 +<code java> 
 +package chapter08; 
 + 
 +public class Phone { 
 + 
 + String name; 
 + String color; 
 + String company; 
 +  
 + void call() { 
 + System.out.println("전화를 건다"); 
 +
 +  
 + void receive() { 
 + System.out.println("전화를 받다"); 
 +
 +  
 +
 + 
 +</code> 
 + 
 +:wr:**SmartPhone.java** : 자식 클래스 
 + 
 +<code java> 
 +package chapter08; 
 + 
 +public class SmartPhone extends Phone { 
 + 
 + public void installApp() { 
 + System.out.println("앱 설치"); 
 +
 +  
 +
 + 
 +</code> 
 + 
 +:wr:**SmartPhoneMain.java** 
 + 
 +<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("Phone 출력"); 
 + 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("SmartPhone 출력"); 
 + System.out.println(sp.name); 
 + System.out.println(sp.company); 
 + System.out.println(sp.color); 
 + sp.call(); 
 + sp.receive(); 
 + sp.installApp(); 
 +  
 +
 +
 + 
 +</code> 
 + 
 +<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); // 메서드 지역변수 number 
 + System.out.println(this.number); // 자신 객체의 number 
 + System.out.println(super.number); // 부모 객체의 number 
 +  
 +
 +
 +</code> 
 + 
 +<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); // 메서드 지역변수 number 
 + System.out.println(this.number); // 자신 객체의 number 
 + System.out.println(super.number); // 부모 객체의 number 
 +
 + 
 +
 + 
 +</code> 
 + 
 +<color #ff7f27>**super()**</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); 
 +
 +  
 +
 +</code> 
 + 
 +===== 메서드 재정의 ===== 
 + 
 +**Car.java** 
 + 
 +<code java> 
 +package chapter08; 
 + 
 +public class Car { 
 + 
 + String color; 
 + String name; 
 +  
 + public void go() { 
 + System.out.println("전진"); 
 +
 +  
 + void back() { 
 + System.out.println("후진"); 
 +
 +
 + 
 +</code> 
 + 
 +**Taxi.java** 
 + 
 +<code java> 
 +package chapter08; 
 + 
 +public class Taxi extends Car { 
 +  
 + public void go() { 
 + System.out.println("미터기를 켜고 전진"); 
 +
 +
 + 
 +</code> 
 + 
 +**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); 
 +  
 +
 +
 + 
 +</code> 
 + 
 +===== 다형성 ===== 
 + 
 +**Parent.java** 
 + 
 +<code java> 
 +package chapter08.poly; 
 + 
 +public class Parent { 
 + 
 + String name; 
 +  
 + void walk() { 
 + System.out.println("부모가 걷는다."); 
 +
 +  
 + void run() { 
 + System.out.println("부모가 달린다."); 
 +
 +  
 +
 + 
 +</code> 
 + 
 +**Child.java** 
 + 
 +<code java> 
 +package chapter08.poly; 
 + 
 +public class Child extends Parent { 
 + 
 + String name; 
 +  
 + // 재정의 메서드 
 + void run() { 
 + System.out.println("자식이 달린다."); 
 +
 +  
 + // 추가된 메서드 
 + void eat() { 
 + System.out.println("자식이 먹는다."); 
 +
 +
 + 
 +</code> 
 + 
 +**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> 
 + 
 +<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> 
 + 
 + 
 +<code java> 
 +package chapter08.poly; 
 + 
 +public class GraphicCard { 
 + 
 + int memory; 
 +  
 + public void process() { 
 + System.out.println("그래픽 처리"); 
 +
 +  
 +
 +                                                                                                                                                                                                                                                            
 +</code> 
 + 
 +<code java> 
 +package chapter08.poly; 
 + 
 +public class Amd extends GraphicCard { 
 + 
 + public void process() { 
 + System.out.println("AMD 그래픽 처리"); 
 +
 +  
 +
 + 
 +</code> 
 + 
 + 
 +<code java> 
 +package chapter08.poly; 
 + 
 +public class Nvidia extends GraphicCard { 
 + 
 + public void process() { 
 + System.out.println("Nvidia 그래픽 처리"); 
 +
 +  
 +
 + 
 +</code> 
 + 
 +:wr:<color #ff7f27>**매개변수의 다형성**</color> 
 + 
 +<code java> 
 +package chapter08.poly; 
 + 
 +public class Game { 
 + 
 + void display(GraphicCard gc) { 
 + gc.process(); 
 +
 +  
 +
 + 
 +</code> 
 + 
 +<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 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> 
 + 
 +===== 상속관계에서 접근제한자 ===== 
 + 
 +Aclass 
 + 
 +<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> 
 + 
 +AclassMain 
 + 
 +<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> 
 + 
 +Bclass 
 + 
 +<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> 
 + 
 +CClass 
 +<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> 
 + 
 +===== 추상클래스 ===== 
 + 
 +  접근제한자 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=" + 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> 
 + 
 +===== 객체를 배열로 처리 ===== 
 + 
 +**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 +"은(는) 잠을 잔다."); 
 +
 +
 + 
 +</code> 
 + 
 +**Eagle.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> 
 + 
 +**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> 
 +package chapter08; 
 + 
 +public class Lion extends Animal { 
 + 
 + Lion(String type, String name) { 
 + super(type, name); 
 +
 +  
 + void sleep() { 
 + System.out.println(this.name +"은(는) 숲속에서 잠을 잔다."); 
 +
 + 
 +  
 +
 + 
 +</code> 
 + 
 +**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> 
 +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> 
 + 
 +===== 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("method() 재정의"); 
 +
 +  
 + /* 
 + void finalMethod() { // 재정의 불가 
 + System.out.println("finalMethod() 재정의"); 
 +
 + */ 
 +
 +</code>