자바 클래스와 객체
class Main {
public static void main(String[] args) {
System.out.println("== 표준Tv 리모콘 들여오기 전 ==");
샤오미Tv a샤오미Tv = new 샤오미Tv();
삼성Tv a삼성Tv = new 삼성Tv();
LGTv aLGTv = new LGTv();
a샤오미Tv.켜기();
a샤오미Tv.끄기();
a샤오미Tv.vr켜기();
a삼성Tv.켜기();
a삼성Tv.끄기();
a삼성Tv.ar켜기();
aLGTv.켜기();
aLGTv.끄기();
aLGTv.게임모드전환();
System.out.println("== 표준Tv 리모콘 들여온 후 ==");
표준Tv a표준Tv;
a표준Tv = a샤오미Tv;
a표준Tv.켜기();
a표준Tv.끄기();
a표준Tv = a삼성Tv;
a표준Tv.켜기();
a표준Tv.끄기();
a표준Tv = aLGTv;
a표준Tv.켜기();
a표준Tv.끄기();
LGTv aLGTv2 = (LGTv)a표준Tv;
aLGTv2.게임모드전환();
}
}
class 표준Tv {
void 켜기() { }
void 끄기() { }
}
class 샤오미Tv extends 표준Tv {
void 켜기() {
System.out.println("샤오미Tv 켜집니다.");
}
void 끄기() {
System.out.println("샤오미Tv 꺼집니다.");
}
void vr켜기() {
System.out.println("샤오미Tv vr켜기!");
}
}
class 삼성Tv extends 표준Tv {
void 켜기() {
System.out.println("삼성Tv 켜집니다.");
}
void 끄기() {
System.out.println("삼성Tv 꺼집니다.");
}
void ar켜기() {
System.out.println("삼성Tv ar켜기!");
}
}
class LGTv extends 표준Tv {
void 켜기() {
System.out.println("LGTv 켜집니다.");
}
void 끄기() {
System.out.println("LGTv 꺼집니다.");
}
void 게임모드전환() {
System.out.println("LGTv 게임모드전환!");
}
}
Java
복사
상위타입 리모콘을 사용하면 좋은 이유
•
부모타입으로 자식객체를 참조할 수 있다.
◦
부모타입으로 자식객체를 참조하게 되면 부모가 가지고 있는 메소드만 사용할 수 있다.
자바 this 의미
class thisTest{
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
// this는 내부에서만 사용된다.
Java
복사
this를 사용하면, 메서드의 인수나 변수에 필드와 같은 이름을 붙여도 그것들을 구분하여 사용할 수 있다. this는 주로 생성자와 메소드의 매개변수 이름이 필드와 동일한 경우, 인스턴스 멤버인 필드임을 명시하고자 할때 사용.
class와 extents 실행되는 세부과정
class Main {
public static void main(String[] args) {
무기 a무기 = new 칼();
a무기.공격();
}
}
class 무기 { }
class 칼 extends 무기 {
void 공격() { }
}
Java
복사
1.
`a무기` 변수(창고)에게 접근한다.
2.
창고의 문을 연다.
3.
무기가 있을 줄 알았는데 무기 리모콘이 있다.
4.
무기리모콘의 버튼중에서 `공격` 버튼을 누르려고 시도한다.
5.
버튼을 못찾아서 실패!!
* 안되는 이유
실제로 리모콘에 연결된 칼 객체는 `공격` 기능을 가지고 있다.
안되는 이유는 단순히 버튼이 없어서 이다.
자바에서는 위험하다고 판단되면, 통과시켜주지 않는다 => 개발자의 서명 필요
자바에서는 리모콘의 버튼이 추가되는 것을 극도로 무서워한다. (편리해지긴 하지만)
자바에서는 리모콘의 버튼이 제거되는 것은 늘 안전하다고 판단된다. (불편해지긴 하지만)