JAVA_ CLASS 상속, 생성자

장성욱·2025년 6월 9일

JAVA

목록 보기
9/23

상속을 통한 캐스팅

1.

class Main {
    public static void main(String[] args) {
        칼 a칼 = new();
        a칼 = new();
    }
}

class{
}

classextends{
}


2.

class Main {
    public static void main(String[] args) {
        무기 a무기 = new();  칼 객체이지만 무기타입으로 사용
        a무기.공격(); // 칼에서 오버라이딩(재정의)한 공격() 실행
    }
}
class 무기 {
    void 공격 () {
    }
}

classextends 무기 {
    void 공격 () {
        System.out.println("칼로 공격합니다");     // 무기클래스에 줘도 상관없지만, 추후 무기클래스에 다른 클래스가 또 상속될 경우를 고려해서
                                                 // 칼 클래스에서 따로 작성
    }
}

메서드 매개변수 활용

class Main {
    public static void main(String[] args) {
        전사 a전사 = new 전사();

        a전사.공격("브라이언", "칼");
        a전사.재공격("브라이언", "칼");
        a전사.공격("필립", "창");
        a전사.재공격("필립", "창");
        a전사.공격("마크", "지팡이");
        a전사.재공격("마크", "지팡이");

    }

}

class 전사 {
    void 공격(String 공격자, String 무기) {
        System.out.println(공격자 +"이(가)" + 무기 + "(으)로 공격합니다.");
    }
    void 재공격(String 공격자, String 무기) {
        System.out.println(공격자 +"이(가)" + 무기 + "(으)로 공격합니다.");
    }
}

  • 심화
    public static void main(String[] args) {
        전사 a전사 = new 전사();

        a전사.공격("브라이언", "칼");
        a전사.재공격();
        a전사.공격("필립", "창");
        a전사.재공격();
        a전사.공격("마크", "지팡이");
        a전사.재공격();

    }

}

class 전사 {
    String 공격자;
    String 무기;

    void 공격 (String 공격자, String 무기) {
        this. 공격자 = 공격자;	//this.공격자 = 위에 String 공격자, 공격자 = 인자
        this. 무기 = 무기;
        재공격();		// 재공격()에 삽입
    }

    void 재공격 () {
        System.out.printf("%s이(가) %s(으)로 공격합니다\n",공격자, 무기);
    }
}

자동형변환, 수동형변환

class Main {
    public static void main(String[] args) {
        int i = 10;
        double d = i; // 여기선 자동형변환 허용
        
        - 자동형변환 불가능
        i = int d; // 여기선 자동형변환 불가능, 문제가 발생할 가능성이 있어서
        
        - 수동형변환
        i = (int) d; // 수동형변환, 문제없이 출력 가능
    }
}

생성자

  • 생성자의 이름은 클래스 이름과 동일해야 함
  • 생성자는 다른 메서드와 다르게 리턴 타입이 없음
  • 생성자는 객체가 생성될 때(new) 자동으로 한 번만 호출
  • 생성자는 매개변수 조건에 따라 여러개를 작성할 수 있음 (오버로딩)
  • 생성자는 클래스에 최소 1개는 있어야 하며, 생성자 코드가 없을 경우
    컴파일러가 기본생성자를 자동으로 생성
public class Main {
    public static void main(String[] args) {
    
        // Student 객체 생성 + 생성자 실행
        Student s1 = new Student("철수", 15);
        Student s2 = new Student("영희", 14);

        // 정보 출력
        s1.printInfo();
        System.out.println("----------");
        s2.printInfo();
    }
}

class Student {
    String name;
    int age;
	
    // 생성자
    Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
	
    // 학생 정보 출력 메서드
    void printInfo() {
        System.out.println("이름: " + name);
        System.out.println("나이: " + age);
        }

    }

abstract

profile
https://frost-puck-b0f.notion.site/B-2610fdaef71d80c49d1bccdcb575dcb5

0개의 댓글