자바

    추상클래스(일부 다형성 보장)

    추상클래스 1. 해당 클래스가 추상메서드를 1개라도 가지고 있으면, 그 클래스는 추상클래스(abstract class Animal)가 된다. 추상클래스는 불완전한 클래스이기 때문에 Animal ani = new Animal(); 객체생성불가!!! public abstract class Animal { public abstract void eat(); // 추상 메서드 public void move() { // 구현메서드 System.out.println("무리를 지어서 이동한다."); } } 2. 부모클래스가 추상메소드를 포함하고 있는 경우 그 추상메소드는 자식클래스에서 반드시 오버라이딩(Overring)되어야 한다. public class Dog extends Animal { // eat() { ? }..

    다형성

    다형성

    1. 다형성 조건 1. 상속(extends) 또는 구현(implements) 2. 오버라이딩(Overring) 3. 부모타입 r = new 자식객체 (upcasting) 또는 인터페이스 r = new 구현클래스 2. 다형성 인수 public static void display (Animal r) { r.eat(); } Arnimal r의 매개변수로 new Dog(); new Cat(); new Horse(); new Cow(); 등 Animal의 모든 자식객체(하위클래스)를 받을 수 있다. 3. 다형성 배열 (서로 다른 자식객체를 담을 수 있다.) public class TPC24 { public static void main(String[] args) { Animal[] ani=new Animal[2]..

    부모와 자식간에는 형변환이 된다. & 나보다 부모가 먼저야

    부모와 자식간에는 형변환이 된다. & 나보다 부모가 먼저야

    1. 형변환방식 1) Animal ani = new Cat(); →이렇게 객체를 변환하는 방식을 upcasting이라 한다. →부모 =(자동형변환)자식 → ani.eat(); // 자식이 부모타입으로 형변환 되었더라도 오버라이딩 (overring)된 경우 자식객체Cat의 eat();이 호출된다. →"고양이 처럼 먹다." 출력 →ani.night(); 자식객체가 부모타입으로 형변환 됐으므로 부모타입이 가지고 있지 않은 night()메서드는 사용불가 →강제적 형변환 필요 2) Cat cat =(Cat)ani; →부모타입에서 자식타입으로 객체를 변환하는 방식을 downcasting이라 한다. → cat.night(); //사용가능 →밤에 눈이 빛난다. 2. 나보다 부모가 먼저인 이유 Animal d = new..

    오버라이딩(Overrring)

    오버라이딩(Overrring)

    2. 오버라이딩의 역할 1) Dog d = new Dog(); d.eat(); d객체변수의 타입이 Dog 타입이므로 부모의 eat("먹다") 가 무시가 되고, 오버라이딩(Overriding)된 자식의 eat("개처럼 먹다")가 출력된다. 2) Animal d=new Dog(); d.eat(); 원칙적으로 객체변수타입이 Animal이므로 객체변수 d접근할수 있는 객체는 Animal 객체이며는 Dog객체의 eat()에 접 근할 수 없다. 그러나 오버라이딩하는 경우 객체변수 d는 Dog객체의 eat()에 접근할수 있다. 따라서 d.eat()하는 경우 "개처럼 먹다"가 출력된다. 인프런의 Java TPC강의자료참고