java 221109

John·2022년 11월 9일
0

java

목록 보기
11/20
class Cake {
    public void sweet() {
    }
}
class CheeseCake extends Cake {					//Cake 에서 상속
    public void milky(){
    }
}
public class CheeseCakeTest {
    public static void main(String[] args) {
        CheeseCake ca1 = new CheeseCake();
        Cake ca2 = ca1;
//위는 문제없이 가능
        Cake ca3 = new CheeseCake();
        CheeseCake ca4 = ca3;     //자식이 부모에 못담김

함수 오버라이딩

  • 자식용

% super 는 부모용이다

class Cake {
    public void yummy() {
        System.out.println("Yummy Cake");
    }
}
class CheeseCake extends Cake {
    public void yummy() {
        System.out.println("Yummy Cheese Cake");       //자식인 치케가 케익에 오버라이딩했다
    }
}
public class CheeseCakeTest {
    public static void main(String[] args) {
        Cake c1 = new CheeseCake();
        CheeseCake c2 = new CheeseCake();
        c1.yummy();
        c2.yummy();
  • c1 주소 : 2000
  • c2 주소 : 3000
    의 방이 생긴다

heap 에는

  • Yummy Cake 주소:2001
  • yummy cheese cake 주소:3001
    이 담긴다
    오버라이딩되어 yummy cake 를 빈칸으로 두고

c1.yummy(); 가 호출될때
heap 에 담겨있는
yummy cheese cake 의 주소값을 주게된다.

함수 오버라이딩이라고 한다.

인스터스 변수와 클래스 변수등에는 영향없다

sumArea = 0;
        Shape[] shape = new Shape[3];
        shape[0] = new Circle(0);
        shape[1] = new Triangle(10,10);
for (Shape s :
                shape) {
            sumArea += s.getArea();
        }

shape 배열안에 각 방들이 생긴다
칸마다 주소값이 있고
+= s.getArea(); 가 실행될때마다 메모리에 생성되고,
각 반복회가 끝나면 사라진다.


lass addFunction{
    static double getArea(Circle circle){
        return circle.getArea();
    }
    static double getArea(Triangle triangle){
        return triangle.getArea();
    }
    //위의 두개와 아래하나가 같다
    //아래 하나로 끝난다
    static double getArea(Shape shape){
        return shape.getArea();
    }
}



class Box {
   public void simpleWrap() {
      System.out.println("Simple Wrapping");
   }
}
//
class PaperBox extends Box {
   public void paperWrap() {
      System.out.println("Paper Wrapping");
   }
}
//
class GoldPaperBox extends PaperBox {
   public void goldWrap() {
      System.out.println("Gold Wrapping");
   }
}
public static void main(String[] args) {
   Box box1 = new Box();
   PaperBox box2 = new PaperBox();
   GoldPaperBox box3 = new GoldPaperBox();
//
   wrapBox(box1);
   wrapBox(box2);
   wrapBox(box3);
}
public static void wrapBox(Box box) {			 //box 가 메모리에 올라가면서,
   if (box instanceof GoldPaperBox) {			 //해당주소값이 생기는 방이 생긴다
   												 //해당주소찾아가서 인스턴스가 있으면 true   
      ((GoldPaperBox)box).goldWrap();
   }
   else if (box instanceof PaperBox) {
      ((PaperBox)box).paperWrap();
   }
   else {
      box.simpleWrap();
   }
}
profile
hello there

0개의 댓글