public class PlayGame {
public static void main(String[] args) {
Wizard wi = new Wizard("해리포터",100,100);
System.out.println(wi.toString());
}
}
class Novice {
// 필드
private String name;
private int hp;
// 생성자
public Novice(String name, int hp) {
this.name = name;
this.hp = hp;
}
// toString
public String toString() {
return String.format("%s(HP:%d)", this.name, this.hp);
}
}
// 자식클래스
class Wizard extends Novice { // 자식클래스 extends: Novice 속성 확장
/*private String name; // Novice 클래스와 중복된 부분 삭제
private int hp; // Novice 클래스와 중복된 부분 삭제 */
// 필드
private int mp;
// 생성자
public Wizard(String name, int hp, int mp) {
/*this.name = name; // Novice 클래스와 중복된 부분 삭제
this.hp = hp; // Novice 클래스와 중복된 부분 삭제 */
super(name, hp); // Novice 초기화, 객체의 영역을 만들어 줌
this.mp = mp;
}
}
// toString
/*public String toString() { // Novice 클래스와 중복된 부분 삭제
return String.format("%s(HP:%d)", this.name, this.hp);//
}// Novice 클래스와 중복된 부분 삭제 */
부모 메서드를 자식 클래스에서 재정의하는 것
- 상위클래스의 메서드 이름과 같아야 한다.
- 매개변수가 같아야 한다.
- 반환타입이 같아야 한다.
=> 구현부 부분만 변경
예를 들어 상위 클래스에 접근제어자가 protected로 설정이 되어 있다면
하위클래스의 접근제어자는 protected나 public으로 설정해줘야한다.
보통은 같은 범위의 접근제어자를 사용하지만,
가끔 특이한 경우에 다른 접근제어자를 사용해야 하는 경우가 있는데,
이럴때 이 원칙을 생각하면 될것이다.
접근 제어자의 접근 범위를 넓은 범위에서 좁은 범위 순으로 표현하면 다음과 같다.
(public > protected > (default) > private)
class Cat {
public void cry() {
System.out.println("야옹~"); // 구현부
}
}
class Tiger extends Cat {
public void cry() {
System.out.println("어흥~"); // 구현부
}
}
문제 1 ) 초보자(Novice)클래스를 확장하여 마법사(Wizard)클래스를 정의하고 있다.
toString() 메서드를 "오버라이딩"해라!
여기서 접근제한자 중 protected
는 상속 관계시 공개, 즉, 자식들은 공개!
public class PlayGame {
public static void main(String[] args) {
// 객체생성
Novice nov = new Novice("초보", 100);
Wizard wi = new Wizard("해리포터",100,100);
// 객체 정보 출력
System.out.println(nov.toString());
System.out.println(wi.toString());
}
}
class Novice {
// 필드
protected String name; // 접근제한자(protected: 상속 관계시 공개, 자식들은 공개!)
protected int hp;
// 생성자
public Novice(String name, int hp) {
this.name = name;
this.hp = hp;
}
// toString
public String toString() {
return String.format("[Novice] %s(HP:%d)", this.name, this.hp);
}
}
// 자식클래스
class Wizard extends Novice { // 자식클래스 extends: Novice 속성 확장)
// 필드
protected int mp;
// 생성자
public Wizard(String name, int hp, int mp) {
super(name, hp); // Novice 초기화, 객체의 영역을 만들어 줌
this.mp = mp;
}
public String toString() {
return String.format("[Wizard] %s(HP:%d) (mp:%d)", this.name, this.hp, this.mp);
}
}
필요할때 간편히 쓰는 클래스들
Arrays.toString()
배열을 간편히 출력
Collections.suffle()
ArrayList요소를 무작위로 섞음
new ArrayList<Integer>()
Integer를 담기위한 객체 생성
Integer
int타입을 클래스로 변형한 것
예제로 배우는 자바(2018, 무료 JANA 기초 입문) 홍팍 참고
내용은 계속 수정하는 중입니다!