public class PointTest2 {
public static void main(String[] args) {
Point p = new Point3D();
p.a(); // b!
p.aa(); // a!
// p.bb(); 에러
}
}
class Point {
protected void a() {
System.out.println("a!");
}
protected void aa() {
System.out.println("a!");
}
}
class Point3D extends Point {
@Override
protected void a() {
System.out.println("b!");
}
protected void bb() {
System.out.println("bb!");
}
}
내가 짜본건데 p.aa() 메서드를 호출하면 오버라이딩된 자식의 메서드가 호출되던데
주석처리 해놓은 p.bb()는 왜 에러가 뜨는건지 몰겠당
부모와 자식의 것을 다 사용 가능하게 할 줄 알았고 그게 다형성인줄 알았것만..
아직 머릿속에 정리가 안 된 느낌이라
쓰는 이유나 그래서 얻는 이득
잘 안 쓰다 보니까 확 안 와닿네
정확한 해석좀 부탁함!
포인트 변수에서는 포인트3d 객체라도 포인트 변수의 메서드만 사용가능함
아마 실행하기전부터 빨간줄 뜰건데 ㅇㅅㅇ?
ㅇㅇㅇ 그거는 아는데 굳이 왜 그렇게 만들어놓은건가 싶어서
그게 다형성이야 ㅇㅅㅇ 메모리 차원에서 그렇게 관리하겠지 왜냐고? 그렇게 설계했으니까
저렇게 안하면 다른 저 포인트 클래스를 상속받은 걸 저쪽에 대입하고 저 bb함수를 사용하면 이상하잖아
상식적인 대로 그렇게 설계한 거지
"저렇게 안하면 다른 저 포인트 클래스를 상속받은 걸 저쪽에 대입하고 저 bb함수를 사용하면 이상하잖아" 이 문장 코드로 짜줄 수 있음??? 말이 안되도 짜줘 이해가 잘 안가넹
https://gall.dcinside.com/board/view/?id=programming&no=1956986&page=1
해당 댓글은 삭제되었습니다.
그냥 다형성 사용 이유를 알고 싶었던거야 저건 실험으로 해본거구 오류 뜨는건 알겠어
그래서 다형성 사용이유가 뭔가..싶어서 경험이 없어서 그런가 다형성을 굳이 써야 하는 순간이 있나? 싶어진거
다형성은 그냥 편리 위주임. 같은 이름이라도 패러미터(입력값)에 맞춰 동작하는거ㅇㅅㅇa
해당 댓글은 삭제되었습니다.
오오오오 이해 했어 굿굿 방금 코드로 직접 짜고 봤는데 같은 부모 타입이라도 자식의 것을 이용하려고 다형성(한 참조변수 타입으로 다양한 형태를 띄움)을 쓰는거군
다형성은 대충 말하면 같은 인터페이스로 다른 기능을 구현 하는 개념이고 상식적으로 봐도 말이 안 되는 게 저기서 Point3D2 라는 자식 클래스를 만들고 cc라는 함수를 새로 만들면 Point라는 타입이 bb cc다 지원 하라는 얘긴데 그럼 정적타입을 왜 씀
polymorphism(다형성) - 하나의 코드가 여러 자료형으로 구현되어 실행되는거다냥
Strategy나 State 패턴 공부해 바로 이해되니까