자바/클래스

Algo rhythm·2022년 6월 12일
1

자바

목록 보기
2/6

클래스 기본

class Animal {
    String name;

    public void setName(String inputedName) {
        this.name = inputedName;
    }
}

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();
        cat.setName("boby");  // 메소드 호출

        Animal dog = new Animal();
        dog.setName("happy");

        System.out.println(cat.name);
        System.out.println(dog.name);
    }
}
// 출처 : https://wikidocs.net/214
  • Animal 클래스에 선언된 변수 name은 객체 변수라고 하여 Animal 클래스에서만 인식하는 변수
  • setName 메소드는 문자열 형식의 '인자'(inputedName)를 입력받고 입력받은 인자는 name이라는 객체 변수에 대입하도록 되어있음
  • 메소드를 만들 때 입력하는 인자의 이름은 무엇을 하든 괜찮음

Animal cat = new Animal();의 의미

  • "Animal cat" : Animal 클래스를 기능을 빌려오는 cat 이라는 인스턴스를 생성
  • "new Animal()" : Animal 클래스의 기능을 부여
    -- 위 처럼 나만의 방식으로 기억

"cat.setName("boby")"

  • Animal 클래스의 기능을 부여 받은 cat 인스턴스(instance)에서 setName 메서드를 사용하여 body를 인자로 입력하고, Animal 클래스의 객체 변수인 name에 "body"를 입력

Animal dog = new Animal(); dog.setName("happy");

  • dog 인스턴스 또한 위와 같은 방식으로 happy라는 이름을 부여

기억할 점

  • cat과 dog 모두 Animal 클래스의 기능을 부여 받고 이름을 정했지만 각각 독립적인 인스턴스로 서로 간의 영향을 주지 않음

클래스의 상속

class Animal {
    String name;

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

class Dog extends Animal {
}

public class Sample {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("poppy");
        System.out.println(dog.name);  // poppy 출력
    }
}
// 출처 : https://wikidocs.net/280
  • class Dog extends Animal {}
    -- Animal 클래스의 기능을 Dog 클래스에 전달
  • 따라서 Animal 클래스의 setName 메소드를 사용 가능
class Dog extends Animal {
    void sleep() {
        System.out.println(this.name+" zzz");
    }
}
// 출처 : https://wikidocs.net/280
  • Animal 클래스의 기능을 전부 전달 받은 Dog 클래스에 Dog 클래스 고유의 메소드를 추가하여 응용 가능

IS-A 관계

Animal dog = new Dog() : 우에서 좌로 읽음

  • Dog is a Animal
  • Dog 보다 상위 클래스인 Animal

오버라이딩

상위 클래스가 가진 메소드를 하위클래스에서 재정의

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() {
        System.out.println(this.name + " zzz in house");
    }
}

public class Sample {
    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog();
        houseDog.setName("happy");
        houseDog.sleep();  // happy zzz in house 출력
    }
}
출처 : https://wikidocs.net/280
  • Animal 클래스를 상속한 Dog 클래스의 sleep() 메소드와 Animal 클래스를 상속한 Dog 클래스를 상속한 HouseDog 클래스의 sleep() 메소드는 서로 동일한 이름의 메소드로 houseDog.sleep() 명령을 실행할 시 충돌이 아닌 가장 가까운 메소드(여기선 HouseDog 클래스이 sleep 메소드)를 실행.

메소드 오버로딩

같은 이름의 메서드를 여러개 가지면 매개변수의 유형이가 개수를 다르게 하여 차이를 두는 것

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

    void sleep(int hour) {
        System.out.println(this.name + " zzz in house for " + hour + " hours");
    }
}
출처 : https://wikidocs.net/280
profile
배운 건 써 먹자

0개의 댓글