JAVA_ 객체, 형변환(Type casting), 생성자

장성욱·2025년 6월 16일

JAVA

목록 보기
12/23
  • 멤버변수, 지역변수, 전역변수, 참조변수

ㄴ 공부 및 정리 (문제보단 개념위주로 공부)

자동차 리몬콘이 페라리 객체를 가리키게 한 후 해당 리모콘이 가리키고 있는 객체를 다시 페라리 리모콘으로 가리키게하는 코드를 작성 (정답 올라오면 다시 작성!)


class Main {
    public static void main(String[] args) {
        자동차 a자동차 = new 페라리();		
        // 자동차 타입의 a자동차라는 변수가 페라리 객체를 가리킴
        페라리 a페라리 = (페라리)a자동차;	
        // 페라리를 가리키는 변수 a자동차를 페라리타입의 변수로 형변환
        
    }
}
class 자동차 {
    void 달리다() {}
    void 서다() {}
}
class 페라리 extends 자동차 {
    void 뚜껑이_열리다() {}
}

클래스안에 변수 정의


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

        a사람.나이 = 20;	// a사람의 int타입의 변수 나이의 값은 20
        a사람.a왼팔 = new();	// a사람의 a왼팔 변수의 타입은 팔타입 객체를 저장
        // a사람 개체의 왼팔에 팔객체를 대입
        // a사람의 a왼팔 멤버변수에생성된 객체를 참조하게 한다.
    }
}

class 사람 {
    // 클래스안에 변수를 정의 할 수 있다.
    int 나이;		// int타입 저장할 수 있는 지변수 나이
    팔 a왼팔;	   // 팔타입의 객체를 저장할 수 있는 참조변수 a왼팔
}

classextends 사람 {
}

생성자 메서드


public class Main {
    public static void main(String[] args) {
        전사 a전사1 = new 전사("카니");
        System.out.println(a전사1.이름);
        System.out.println(a전사1.나이);

        전사 a전사2 = new 전사();
        System.out.println(a전사2.이름);
        System.out.println(a전사2.나이);
    }
}

class 전사 {
    String 이름;
    int 나이;

	 // 생성자 메서드는 특수한 메서드 이다.
     // 명시적으로 개발자가 호출 할 수 없고, 객체가 생성될 때 자동으로 호출된다.
   / / 생성자 메서드는 리턴타입이 없다.
    전사() {
        this("NoName");
    }

    전사(String 이름) {
        this.이름 = 이름;
        나이 = 20;
    }
}


생성자 연쇄호출(Constructor Chaining)

생성자가 서로를 호출하며 이어지는 것
자식클래스 생성자가 호출될 때, 부모클래스의 생성자도 호출됨


public class Main {
    public static void main(String[] args) {
        System.out.println("== 사람객체 생성시작 ==");
        new 사람();
        System.out.println("== 사람객체 생성끝 ==");

        System.out.println("== 청둥오리객체 생성시작 ==");
        new 청둥오리();
        System.out.println("== 청둥오리객체 생성끝 ==");
		/* 출력
		== 청둥오리객체 생성시작 ==
		생물이 생성되었습니다.
		동물이 생성되었습니다.
		오리가 생성되었습니다.
		청둥오리 생성되었습니다.
		== 청둥오리객체 생성끝 ==
		*/
    }
}

class 생물 {
    생물() {
        System.out.println("생물이 생성되었습니다.");
    }
}
class 동물 extends 생물 {
    동물() {
        // super(); // 부모 클래스의 생성자를 호출합니다. 생략가능합니다.
        // 이 함수는 부모 클래스 생성자를 자동으로 호출합니다.

        System.out.println("동물이 생성되었습니다.");
    }

}
class 사람 extends 동물 {

    사람() {
        System.out.println("사람이 생성되었습니다.");
    }
}
class 오리 extends 동물 {
    오리() {
        System.out.println("오리가 생성되었습니다.");
    }
}

class 청둥오리 extends 오리 {
    청둥오리 () {
        System.out.println("청둥오리가 생성되었습니다.");
    }
}
// 청둥오리는 오리를 상속받고 또 오리는 동물을 상속받기에 
// 각 생성자의 출력문이 자동으로 실행된다


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

        String 이름 = "칸";
        a전사.이름 = 이름;
        a전사.나이 = 20;
        a전사.자기소개();

        a전사.나이++;
        a전사.자기소개();

        a전사.나이 = 30;
        a전사.이름 = "카니";
        a전사.자기소개();

        a전사.a무기 = new();
        a전사.공격();
        // 출력 : 카니가 활로 공격합니다.

        a전사.a무기 = new();
        a전사.공격();
        // 출력 : 카니가 칼로 공격합니다.
    }
}

class 전사 {
    // 인스턴스 변수
    String 이름;
    // 인스턴스 변수
    int 나이;
    // 인스턴스 변수
    무기 a무기;

    void 자기소개() {
        System.out.println("안녕하세요. 저는 " + this.나이 + "살 " + this.이름 + " 입니다.");
    }

    void 공격() {
        a무기.사용자명 = 이름;
        a무기.작동();
    }
}

class 무기 {
    String 사용자명;
    void 작동() {
    }
}

classextends 무기 {
    void 작동 () {
        System.out.println(사용자명 + "가 칼로 공격합니다.");
    }
}

classextends 무기 {
    void 작동() {
        System.out.println(사용자명 + "가 활로 공격합니다.");
    }
}

문제 8번) 중복제거


public class Main {
    public static void main(String[] args) {
        전사 a전사 = new 전사();
        a전사.이름 = "카니";
        a전사.나이 = 22;
        a전사.a무기 = new();
        a전사.공격();
        // 출력 : 22살 전사 카니(이)가 칼(으)로 공격합니다.

        a전사.이름 = "초코";
        a전사.나이 = 23;
        a전사.a무기 = new();
        a전사.공격();
        // 출력 : 22살 전사 초코(이)가 활(으)로 공격합니다.
    }
}

class 전사 {
    String 이름;
    int 나이;
    무기 a무기;

    void 공격() {
        a무기.작동(이름, 나이);
    }
}

abstract class 무기 {
    String 무기명;

    void 작동(String 사용자_이름, int 사용자_나이) {
            System.out.println(사용자_나이 + "살 전사 " + 사용자_이름 + "(이)가 " +  무기명 + "(으)로 공격합니다.");
        }
    }

classextends 무기 {() {
        무기명 = "칼";
    }
}

classextends 무기 {() {
        무기명 = "활";
    }

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

0개의 댓글