class Child extends Parent {
//...
}
class TVCR extends TV, VCR { //에러!!
//...
}
class Tv /*자동적으로 'extends Object'가 추가됨*/ {
//...
}
class Hospital{
int getNumberOfPatients()
{
return 500;
}
}
class Pediatrics extends Hospital{
@Override
int getNumberOfPatients()
{
return 53 ;
}
}
class SurgeryDepartment extends Hospital{
@Override
int getNumberOfPatients()
{
return 61;
}
}
→ 즉, 선언부가 서로 일치해야 한다.
class Parent {
void parentMethod() {}
}
class Child extends Parent {
void parentMethod() {} //오버라이딩
void parentMethod(int i) {} //오버로딩
void childMethod() {}
void childMethod(int i) {} //오버로딩
}
class SuperTest2 {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent {
int x = 10;
}
class Child extends Parent {
int x = 20;
void method() {
System.out.println("x=" + x); //x=20
System.out.println("this.x=" + x); //this.x=20
System.out.println("super.x=" + x); //super.x=10
}
}
package 패키지명
/*주석과 공백을 제외한 첫 번째 문장이어야함*/
import 패키지명.클래스명;
import 패키지명.*;
class StaticTest {
static int width = 200; //클래스 변수(static변수)
static { //클래스 초기화 블럭
//static 변수의 복잡한 초기화 수행
}
static int max(int a, int b) { //클래스 메서드(static메서드)
return a > b ? a:b;
}
}
final class FinalTest { //조상이 될 수 없는 클래스
final int MAX_SIZE = 10; //값을 변경할 수 없는 멤버변수
final void getMaxSize() { //오버라이딩할 수 없는 메서드
final int LV = MAX_SIZE; //값을 변경할 수 없는 지역변수
return MAX_SIZE;
}
}
제어자 | 같은 클래스 | 같은 패키지 | 자손 클래스 | 전체 |
---|---|---|---|---|
public | O | O | O | O |
protected | O | O | O | X |
(default) | O | O | X | X |
private | O | X | X | X |
Tv t = new CaptionTv();
Car car = null;
FireEngine fe = newFireEngine();
FireEngine fe2 = null;
car = fe; //car = (Car)fe;에서 형변환이 생략됨. 업캐스팅
fe2 = (FireEngine)car; //형변환 생략불가. 다운캐스팅
Q. 오버라이딩의 정의와 필요성에 대해 설명하세요. 그리고 Car 클래스를 상속받는 Bus 클래스에서 run 메소드를 오버라이드 하세요. 오버라이드한 run메소드는 "차가 달리면서 다음 정거장을 안내합니다."라고 출력해야 합니다.
public class Car {
public void run() {
System.out.println("Car의 run메소드");
}
}
/*Bus 클래스 작성*/
A.
오버라이딩이란 조상 클래스로부터 상속받은 메서드를 자손 클래스에 맞게 재정의 하는 것을 말한다. 조상 클래스로부터 상속받은 메서드를 자손 클래스에서 그대로 사용할 수 없는 경우가 많기 때문에 오버라이딩이 필요하다.
public class Bus extends Car {
public void run() {
System.out.println("차가 달리면서 다음 정거장을 안내합니다.");
}
}