1. 객체지향의 주요 특성.
 1) 추상화 (Abstraction)
 2) 캡슐화 (Encapsulation)
 3) 상속화 (Inheritance)
 
 4) 다형성 (Polymorphism)
     1. Primitive Type
      1) implicit conversion
      2) explicit conversion
     2. Reference Type
      1) 서로 다른 객체는 강제적, 암시적 형변환 안된다.

 public class CastDemo {
 public static void main(String[] args) {
  Test td = new Test();
  Demo d = new Demo();
  td = (Test)d;  // 오류
 }
}

class Test{
 int su = 5;
}
class Demo{
 String name = "taehyung";
}


      2) 자식 --> 부모로 형변환 : 강제적, 암시적 모두 성공한다.
      3) 부모 --> 자식으로 형변환 : 강제적 형변환만 가능하고, 런타임 때 오류발생가능 (반드시 instanceof()로 검증해야한다.)

 public class CastDemo {
 public static void main(String[] args) {
  Test t = new Test();
  Demo d = new Demo();
  t = d;   //자동 형변환
  t = (Test)d;  // 강제 형변환
 }
}
class Test{
 int su = 5;
}
class Demo extends Test{  // 상속
 String name = "taehyung";
}

 public class CastDemo {
 public static void main(String[] args) {
  Test t = new Test();
  Demo d = new Demo();
  d = t;  // 자동 형변환 오류
  d = (Demo)t;  //강제 형변환은 된다
 }
}
class Test{
 int su = 5;
}
class Demo extends Test{
 String name = "taehyung";
}
 public class CastDemo {
 public static void main(String[] args) {
  Test t = new Test();
  Demo d = new Demo();
  if (t instanceof Demo) d = (Demo)t;
  else System.out.println("cannot");
 }
}
class Test{
 int su = 5;
}
class Demo extends Test{
 String name = "taehyung";
}
 자식 --> 부모  부모 -->자식  부모 --> 자식(instanceof())
 
 
 
 
ex) 포유류 형을 상속받은 개나 고양이 들의 형태를 다시 포유류로 형변환이 된다.

 void display(int choice){
  Mammal m = null;   // 경우에 따라 자식의 형태가 부모형으로 변환되어 들어간다.
  switch (choice) {
  case 1: m = new Dog();   break;
  case 2: m = new Cat();  break;
  case 3: m = new Korean();  break;
  case 4: m = new American();  break;
  default:System.out.println("누구냐 넌,"); break;
  }
  m.saySomething();  // 각 종족에 따른 울음소리를 실행하는 메소드

 

ex2) 카센터 자동차 수리

 public class CarCentar {
 public static void main(String[] args) {
  CarCentar cc = new CarCentar();
  Matiz m = new Matiz("마티즈");
  Carnival c = new Carnival("카니발");
  Sonata s = new Sonata("소나타");
  cc.repair(m);
 }
 void repair(Car c){   //부모형 변수에 자식들의 입력을 자동으로 받는다.
  if (c instanceof Sonata) { // 형태를 검사한다.
   System.out.println("현대차 ");
  }else if(c instanceof Matiz){
   System.out.println("대우차 ");
  }else if(c instanceof Carnival){
   System.out.println("기아차 ");
  }  
  System.out.println(c.getName()+" 수리완료!"); //들어온 형태에 상관없이 getName메소드를 사용할수있다.
 }
}

 

 

 

 

 

 

ps -------------------------------------------------------------------------------     

1. 1) tightly coupled(Early Binding) : 컴파일 때.

   2) loosely coupled(Late binding) : 런타임 때

 

 

2. Overriding 할 때 자식은 부모보다 권한이 작으면 안된다.

 private < default < protected < public

 

+ Recent posts