2014년 3월 28일 금요일

JAVA Method Overring(자바 메소드 재정의),[자바교육/자바강좌/자바교육잘하는곳/자바교육추천/자바실무교육/JAVA/JAVA교육/JAVA학원/JAVA실무교육] 상위 클래스의 인스턴스 메소드를 새로 구현함으로써 외부에 다른 반응양식을 보일 수 있다 메쏘드 재정의를 하기위해서 메쏘드 이름, 매개변수개수, 타입, 리턴형이 같아야 한다. 객체의 타입과 관계없이 참조값(reference)이 가리키는 실제 객체 자료형의 메쏘드가 선택되어 런타입중 실행 실제 자료형에 메쏘드가 없으면 가장 가까운 상위 클래스의 메쏘드가 실행된다. 상위 클래스보다 접근 제어를 강화할 수 없다 상위 클래스에 public으로 되어있는 함수를 하위 클래스에서 private으로 할 수 없다. [예제] package onj; class A1 { public void m(int i) { System.out.println("A1의 m(int)"); } public void m(double f) { System.out.println("A1의 m(double)"); } } class B1 extends A1 { //A1의 m(int i) 재정의 public void m(int i) { System.out.println("B1의 m(int)"); } //method overloading(매개변수의 개수를 변화줌) public void m() { System.out.println("B1의 m()"); } } class Override { public static void main(String[] args) { A1 a = new A1(); a.m(1); // A1의 m(int)가 호출됨 B1 b = new B1(); b.m(1); // B1의 m(int)가 호출됨 b.m(1.0); // B1에는 m(double d)이 없다, 상위클래스 A1의 b.m(double d) 호출 A1 c = new B1(); c.m(1); // 마지막으로 재정의된 메쏘드 B의 m(int)가 호출됨 //c.m(); // 컴파일오류: 자료형 A1에는 메쏘드 m()이 정의되어 있지 않음. } } [결과] A1의 m(int) B1의 m(int) A1의 m(double) B1의 m(int) [출처] 오라클자바커뮤니티 - http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecJava&wr_id=616 오라클자바커뮤니티에서 운영, 개발자 전문교육, 개인80%환급 오엔제이프로그래밍실무교육센터(www.onjprogramming.co.kr) 평일주간(9:30~18:30) 개강 (3/31)[기업100%환급]PL/SQL,ORACLE HINT,TUNING (4/07)[기업100%환급]SQL기초에서 Schema Object까지 (4/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 (4/14)C#4.0,ADO.NET,Network 프로그래밍 (4/14)[기업100%환급]Spring ,MyBatis,Hibernate실무과정 평일야간(19:00~22:00) 개강 (4/01)안드로이드개발자과정 (4/04)웹퍼블리싱 마스터 (4/04)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (4/04)C#,ASP.NET마스터 (4/07)SQL초보에서실전전문가까지 (4/08)Spring3.X, MyBatis, Hibernate실무과정 주말(10:00~18:00) 개강 (3/29)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (4/05)웹퍼블리싱 마스터 (4/05)닷넷실무자를위한WPF개발자과정 (4/05)Spring3.X, MyBatis, Hibernate실무과정 (4/05)SQL초보에서실전전문가까지 (4/12)C#,ASP.NET마스터 (4/12)안드로이드개발자과정

JAVA Method Overring(자바 메소드 재정의),[자바교육/자바강좌/자바교육잘하는곳/자바교육추천/자바실무교육/JAVA/JAVA교육/JAVA학원/JAVA실무교육]
 
상위 클래스의 인스턴스 메소드를 새로 구현함으로써 외부에 다른 반응양식을 보일 수 있다
메쏘드 재정의를 하기위해서 메쏘드 이름, 매개변수개수, 타입, 리턴형이 같아야 한다.
객체의 타입과 관계없이 참조값(reference)이 가리키는 실제 객체 자료형의 메쏘드가 선택되어 런타입중 실행
실제 자료형에 메쏘드가 없으면 가장 가까운 상위 클래스의 메쏘드가 실행된다.
상위 클래스보다 접근 제어를 강화할 수 없다
상위 클래스에 public으로 되어있는 함수를 하위 클래스에서 private으로 할 수 없다.
 

[예제]
 
package onj;
class A1 {
 public void m(int i) {
  System.out.println("A1의  m(int)");
 }
 public void m(double f) {
  System.out.println("A1의  m(double)");
 }
}
class B1 extends A1 {
 //A1의 m(int i) 재정의
 public void m(int i) {
  System.out.println("B1의 m(int)");
 }
 //method overloading(매개변수의 개수를 변화줌)
 public void m() {
  System.out.println("B1의 m()");
 }
}
class Override {
 public static void main(String[] args) {
  A1 a = new A1();
  a.m(1); // A1의 m(int)가 호출됨
  B1 b = new B1();
  b.m(1);     // B1의 m(int)가 호출됨
  b.m(1.0);   // B1에는 m(double d)이  없다, 상위클래스 A1의 b.m(double d) 호출
  
  A1 c = new B1();
  c.m(1);   // 마지막으로 재정의된 메쏘드 B의 m(int)가 호출됨
  //c.m(); // 컴파일오류: 자료형 A1에는 메쏘드 m()이 정의되어 있지 않음.
 
 }
}
 
[결과]
 
A1의  m(int)
B1의 m(int)
A1의  m(double)
B1의 m(int)

댓글 없음:

댓글 쓰기