nme.kr

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
프로그램:java:ㄴhomework:book_source:ch08 [2022/01/04 12:37]
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 상속======
  
-==== 8.1 클래스 상속 ====+====클래스 상속 =====
  
-:wr:**Phone.java**+:wr:**Phone.java** : 부모 클래스
  
 <code java> <code java>
줄 26: 줄 26:
 </code> </code>
  
-==== 8.2 메서드 재정의 ====+:wr:**SmartPhone.java** : 자식 클래스
  
 <code java> <code java>
 +package chapter08;
 +
 +public class SmartPhone extends Phone {
 +
 + public void installApp() {
 + System.out.println("앱 설치");
 + }
 +
 +}
  
 </code> </code>
  
-==== 8.3 다형성 ====+:wr:**SmartPhoneMain.java**
  
 <code 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>
  
-==== 8.4 상속관계에서 접근제한자 ====+<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> <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> </code>
  
-==== 8.5 추상클래스 ====+<color #ff7f27>**super()**</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);
 + }
 +
 +}
 </code> </code>
  
-==== 8.6 객체를 배열로 처리 ====+===== 메서드 재정의 ===== 
 + 
 +**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("후진");
 + }
 +}
  
 </code> </code>
  
-==== 8.7 final 제어자 ====+**Taxi.java**
  
 <code 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> </code>