상속을 통한 캐스팅
1.
class Main {
public static void main(String[] args) {
칼 a칼 = new 칼();
a칼 = new 활();
}
}
class 칼 {
}
class 활 extends 칼 {
}
2.
class Main {
public static void main(String[] args) {
무기 a무기 = new 칼(); 칼 객체이지만 무기타입으로 사용
a무기.공격();
}
}
class 무기 {
void 공격 () {
}
}
class 칼 extends 무기 {
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 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