int a = 0;
double d = a; //자동 형 변화
a = (int)d; //강테 형 변환, 명시적 형 변환
형 변환 2종류
형 변환 원칙
연산 할 때 형 변환 일어남.
class A {
}
class B extends A {
}
public class JavaTest {
public static void main(String[] args) {
A aaa = new B();
// A aaa = (A) new B();
// B bbb = new A( ); 오류
B bbb = (B) new A();
// 강제 형 변환
// 객체가 생성되 있어야만 강제 형 변환이 가능 -> new B( );
}
}
객체 insranceof 클래스 명
class Box {
public void simpleWrap() {
System.out.println("Simple Wrapping");
}
}
class PaperBox extends Box {
public void paperWrap() {
System.out.println("Paper Wrapping");
}
}
class GoldPaperBox extends PaperBox {
public void goldWrap() {
System.out.println("Gold Wrapping");
}
}
public class InstanceOf {
public static void wrapBox(Box box) { //(Box box)는 다형성이 적용되어 있음
if(box instanceof GoldPaperBox) {
((GoldPaperBox) box).goldWrap();
}
else if(box instanceof PaperBox) { //box의 주소 찾아가서 PaperBox가 메모리에 있는지 확인
((PaperBox) box).paperWrap();
//PaperBox p = (PaperBox)box; 형 변환 기능
//PaperBox클래스 안의 paperWrap메소드 호출 하고 싶어서
}
else {
box.simpleWrap();
}
}
public static void main(String[] args) {
Box box1 = new Box();
PaperBox box2 = new PaperBox();
GoldPaperBox box3 = new GoldPaperBox();
wrapBox(box1);
wrapBox(box2);
wrapBox(box3);
}
}
[결과]
Simple Wrapping
Paper Wrapping
Gold Wrapping
class Friend {
protected String name;
protected String phone;
public Friend(String name, String phone) {
this.name = name;
this.phone = phone;
}
public void showInfo() {
System.out.println("이름: " + name);
System.out.println("전화: " + phone);
}
}
class UnivFriend extends Friend {
private String major;
public UnivFriend(String name, String phone, String major) {
super(name, phone); //부모 클래스 생성자 호출
this.major = major;
}
@Override
public void showInfo() {
super.showInfo(); //부모 클래스 함수 호출
System.out.println("전공: " + major);
}
}
class ComFriend extends Friend{
private String department;
public ComFriend(String name, String phone, String department) {
super(name, phone); //부모 클래스 생성자 호출
this.department = department;
}
@Override
public void showInfo() {
super.showInfo(); // 부모 클래스 함수 호출
System.out.println("부서: " + department);
}
}
public class PersonInfoIherit {
public static void main(String[] args) {
Friend[] frns = new Friend[10];
int cnt = 0;
//다형성 적용. 부모 클래스 타입의 참조 변수
frns[cnt++] = new UnivFriend("LEE", "Computer", "010-333-555");
frns[cnt++] = new UnivFriend("SEO", "Electronics", "010-222-444");
frns[cnt++] = new ComFriend("YOON", "R&D 1", "02-123-999");
frns[cnt++] = new ComFriend("PARK", "R&D 2", "02-321-777");
for(int i = 0; i < cnt; i++) {
frns[i].showInfo(); //오버라이딩 한 메소드가 호툴된다.
System.out.println();
}
}
}
[결과]
이름: LEE
전화: Computer
전공: 010-333-555
이름: SEO
전화: Electronics
전공: 010-222-444
모든 클래스는 Object클래스를 상속하고 있다.
조상 클래스.
✔컴파일러가 자동으로 해주는 것
①디폴트 생성자
②super( )
③Obect클래스 상속(extends Object)➡new!