Java

2024년 6월 11일 KH 교육 전 Java 예습 마무리 : 상속, 생성자

최종군 2024. 6. 7. 10:31

 

 

 

상속 내용 정리 :

 

 

class Animal {
    String name;
    void setName(String name) { // 메서드에 값을 입력하고 객체 변수를 통해서 메서드 값에 입력한 값을 호출한다
        this.name = name;
    }
}

class Dog extends Animal { void sleep() {System.out.println( this.name + " zzz ");}}


class HouseDog extends Dog {void sleep(int hour){
    System.out.println(this.name +  " zzz in house for " + hour + " hours ");
} } // 부모 클래스의 메서드를 자식 클래스 메서드가 또 다시 재구현하는 행위를 메서드 오버라이딩이라 한다


public class Sample {
    public static void main(String[] args) {

        Dog dog = new Dog();
        dog.setName("poppy"); // 리턴값이 없는 메서드, 메서드에 입력 후 멤버변수(객체변수 ) 호출
        System.out.println(dog.name);
        dog.sleep();

        System.out.println("--------오버라이딩----------");


        HouseDog houseDog = new HouseDog();
        houseDog.setName("happy");
        houseDog.sleep(3);

 

 

생성자 내용 정리 : 

 

HouseDog(String name){  // name 객체 
    this.setName(name); // setName 메서드  
}


생성자는 객체가 생성될 때 호출이 되는 특별한 메서드이다

객체 변수에 값을 무조건 설정해야만 객체가 생성될 수 있도록 강제한 메서드 

 

생성자 HouseDog에서 this. 는 현재의 객체를 지칭한다 

this.setName(name); 현재 객체의 setName 메서드를 호출하여 

생성자로 전달된 name 매개변수의 값을 현재 객체의 name 변수에 할당한다

 

 

HouseDog dog = new HouseDog("도그");
 System.out.println(dog.name); // 도그 호출

 

생성자는 객체가 생성될 때 호출이 되는 특별한 메서드이다

 

생성자는 클래스명과 메서드명이 같다

리턴 타입을 정의하지 않는다(void도 포함)

 

 

생성자 오버로딩 : 

HouseDog(int type) {
    if (type == 1) {
        this.setName("요크셔");}
    else if (type == 2) {
        this.setName("불독");
    }
}

 

 

디폴트 메서드 :

default void printFood() {
    System.out.println("my food is %s\n", getFood());
}

 

인터페이스의 메서드는 구현체를 가질 수 없지만 디폴트(defaul) 메서드를 사용하면

가능하다  자바 8버전 이후부터 가능 

 

 

 

static method :

int LEG_COUNT = 4; 
static int speed(){return LEG_COUNT * 30;}

 

 

interface Predator{  // 인터페이스는 키워드로 작성한다
    String getFood(); // 인터페이스 메서드는 이름과 입출력에 대한 정의만 있고 그 내용은 없다 강제적으로 구현하기 해야하기 때문에


    default void printFood() {System.out.println("my food is %s\n", getFood());} // 디폴트 메서드
    int LEG_COUNT = 4;
    static int speed(){return LEG_COUNT * 30;} // 스태틱 메서드 


}
class Animal { String name; void setName(String name) {this.name = name;}}

class Tiger extends Animal implements Predator {
    public String getFood() {
        return "바나나";
    }
} // interface Predator를 구현하기 위해선 implements 키워드 사용
class Lion extends Animal implements  Predator {
    public String getFood() {
        return "사과";
    }
} // interface Predator를 구현하기 위해선 implements 키워드 사용

class Zookeeper { void feed(Tiger tiger) {
    System.out.println("feed apple"); }
    void feed (Lion lion){
        System.out.println("feed banana");
    }
}

 

 

 

다형성 : 

다형성이란 하나의 인터페이스로 다양한 객체들이 서로 다른 방식으로 반응하는 것 

 

다형성 방식은 두 가지가 있다 

 

상속을 통한 다형성 extends 

 

인터페이스를 통한 다형성이다 implememts