ㄴ 공부 및 정리 (문제보단 개념위주로 공부)
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왼팔
}
class 팔 extends 사람 {
}
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;
}
}
생성자가 서로를 호출하며 이어지는 것
자식클래스 생성자가 호출될 때, 부모클래스의 생성자도 호출됨
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 작동() {
}
}
class 칼 extends 무기 {
void 작동 () {
System.out.println(사용자명 + "가 칼로 공격합니다.");
}
}
class 활 extends 무기 {
void 작동() {
System.out.println(사용자명 + "가 활로 공격합니다.");
}
}
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(사용자_나이 + "살 전사 " + 사용자_이름 + "(이)가 " + 무기명 + "(으)로 공격합니다.");
}
}
class 칼 extends 무기 {
칼() {
무기명 = "칼";
}
}
class 활 extends 무기 {
활() {
무기명 = "활";
}
}