final
- final 변수 : 변수값 변경불가 - 상수
- final 메서드 : 오버라이딩 불가
- final 클래스 : 상속 불가
final 메서드 : 오버라이딩 불가
class MethodSuper{
final void superMethod(){
System.out.println("super method");
}
}
class MethodChild extends MethodSuper{
void superMethod(){
System.out.println("child method");
}
}
public class FinalMethod{
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
final 클래스 : 상속 불가
public final class FinalClass {
int x;
}
class ChildClass extends FinalClass{
}
다형성 polymorphism
- 하나의 참조(레퍼런스) 변수가 여러 타입의 객체 참조
- 부모 클래스 타입의 참조 변수로 자식 클래스 참조
- 참조된 자식 클래스는 자동으로 부모 클래스 타입으로 변환(UpCasting)
- 다시 자식 클래스가 부모 클래스 참조 시는 명시적으로 캐스팅 해야함(DownCasting)
- 다형성에서도 참조된 참조변수에서도 재정의된 자식 메서드 호출됨
- 부모의 참조변수는 메서드의 인자로 전송등에 활용 됨(매개변수의 다형성)
- 향후 인터페이스에서도 다형성 가능
부모 클래스
package chapter08.poly;
public class Parent {
String name;
void walk() {
System.out.println("부모가 걷는다.");
}
void run() {
System.out.println("부모가 달린다.");
}
}
자식 클래스
package chapter08.poly;
public class Child extends Parent {
String name;
// override
void run() {
System.out.println("자식 달리기");
}
// new
void game() {
System.out.println("자식 게임");
}
}
다형성 확인 - 자동형변환
package chapter08.poly;
public class PolyEx {
public static void main(String[] args) {
Child c = new Child();
c.run();
// 부모클래스의 자료형으로 선언 (자동형변환)
Parent p = new Child();
p.run(); // 재정이된 메서드가 실행
// p.game(); // 에러
}
}
다형성 - 강제형변환
package chapter08.poly;
public class PolyEx2 {
public static void main(String[] args) {
Parent p = new Child();
p.run();
// 자식클래스의 자료형으로 변환 (강제형변환)
Child c = (Child)p;
c.game();
}
}
다형성 활용
부모 클래스
package chapter08;
public class GraphicCard {
public void process() {
System.out.println("그래픽 처리");
}
}
자식 클래스
package chapter08.poly;
public class Amd extends GraphicCard {
public void process() {
System.out.println("AMD 그래픽 처리");
}
}
자식 클래스
package chapter08.poly;
public class Nvidia extends GraphicCard {
public void process() {
System.out.println("Nvidia 그래픽 처리");
}
}
다형성 - 부품 교체 하듯 사용
package chapter08.poly;
public class Computer {
public static void main(String[] args) {
GraphicCard gc = new GraphicCard();
gc.process(); // 원래 그래픽카드 process
gc = new Amd();
gc.process();
gc = new Nvidia();
gc.process();
}
}
다형성 - 부품 교체 하듯 사용
package chapter08.poly;
public class Computer {
public static void main(String[] args) {
GraphicCard gc = new GraphicCard();
gc.process(); // 원래 그래픽카드 process
gc = new Amd();
gc.process();
gc = new Nvidia();
gc.process();
}
}
다형성 - 매개변수에서 사용
- 부모의 참조 변수로 모든 자식 클래스 처리
package chapter08.poly;
public class Game {
void display(GraphicCard gc) {
gc.process();
}
}
package chapter08.poly;
public class Computer2 {
public static void main(String[] args) {
Game g = new Game();
Amd gc2 = new Amd();
g.display(gc2);
Nvidia gc3 = new Nvidia();
g.display(gc3);
// 다형성으로 처리
GraphicCard gc = new GraphicCard();
g.display(gc);
gc = new Amd();
g.display(gc);
gc = new Nvidia();
g.display(gc);
}
}
'Programing > JAVA' 카테고리의 다른 글
인터페이스 INTERFACE (1) | 2022.03.04 |
---|---|
상속 INHERITANCE_Part3 (0) | 2022.03.03 |
상속 INHERITANCE_Part1 (2) | 2022.03.03 |
클래스 CLASS_Part4 (0) | 2022.03.02 |
클래스 CLASS_Part3 (0) | 2022.03.02 |