기본 콘텐츠로 건너뛰기

방송대 방통대 Java프로그래밍 4강 - 클래스와 상속(2) - 요약 노트 시험족보 예상문제 - 올에이클래스

Java프로그래밍 4강 - 클래스와 상속(2)

Java프로그래밍 4강 - 클래스와 상속(2)

이번 강의에서는 클래스 구성 요소를 정교하게 다루는 static, final, 필드 초기화와 메소드 오버로딩을 살펴본 뒤, 기존 클래스를 확장하는 상속의 원리를 학습한다. 또한 메소드 오버라이딩, thissuper, 생성자 호출 순서, 메소드 체이닝을 코드와 함께 이해한다.

제1장 클래스 필드와 메소드의 확장

1. static 필드

static 필드는 정적 필드 또는 클래스 변수라고 한다. 일반적인 인스턴스 필드는 객체마다 별도의 저장 공간을 갖지만, 정적 필드는 클래스에 하나만 만들어져 그 클래스의 모든 객체가 공유한다. 객체가 아직 하나도 생성되지 않았더라도 클래스를 통해 사용할 수 있다는 점이 핵심이다.

class Circle {
    int x, y;
    int radius;
    static int count;
}

위 클래스에서 x, y, radius는 각 Circle 객체에 따로 존재한다. 반면 count는 모든 원 객체가 함께 사용하는 데이터이다. 정적 필드는 Circle.count처럼 클래스 이름으로 접근하는 것이 의미를 가장 분명하게 드러내며, 객체 참조를 통한 접근도 문법상 가능하다.

시험 포인트: 인스턴스 필드는 객체별 데이터이고, static 필드는 클래스 전체가 공유하는 데이터이다. 정적 필드는 객체 생성 없이 클래스이름.정적필드 형식으로 사용할 수 있다.

2. static 메소드

static 메소드는 정적 메소드 또는 클래스 메소드라고 한다. 객체의 상태에 의존하지 않고 클래스 차원에서 제공할 기능에 알맞다. 인스턴스 메소드와 달리 객체와 무관하게 호출되고 실행되므로 클래스이름.정적메소드() 형식으로 호출하는 것이 일반적이다.

class Math {
    public static double sqrt(double a) {
        // 제곱근 계산
    }
}

double value = Math.sqrt(2.0);
int number = Integer.parseInt("120");

정적 메소드는 정적 필드를 직접 다룰 수 있다. 그러나 특정 객체가 선택되지 않은 상태에서 실행되므로 인스턴스 필드나 인스턴스 메소드를 객체 참조 없이 직접 사용할 수는 없다. 필요한 경우 객체를 명시적으로 준비해 그 객체의 멤버에 접근해야 한다.

3. final 필드와 final 메소드

final 필드는 상수 데이터로 사용한다. 한 번만 값을 지정할 수 있으므로 선언과 동시에 초기화하거나 생성 과정에서 값을 정해야 한다. 클래스 전체에서 공유할 상수는 static final을 함께 사용하는 경우가 많다.

final static double PI = 3.141592;

final 메소드는 자식 클래스가 상속할 수는 있지만 재정의, 즉 오버라이딩할 수 없는 메소드이다. 부모 클래스에서 정한 동작이 자식 클래스에서도 바뀌지 않아야 할 때 사용한다.

구분: static은 멤버가 객체가 아닌 클래스에 속한다는 뜻이고, final은 필드의 값을 다시 대입하거나 메소드의 구현을 재정의하지 못하게 한다는 뜻이다. 두 키워드는 목적이 다르며 함께 사용할 수도 있다.

제2장 필드 초기화와 메소드 오버로딩

1. 필드 초기화 방법

필드 초기화는 객체가 사용할 데이터를 알맞은 시작 상태로 만드는 과정이다. 필드는 선언문, 초기화 블록, 생성자를 이용해 초기화할 수 있다. 정적 필드는 프로그램에서 클래스가 준비될 때 초기화되고, 인스턴스 필드는 객체가 생성될 때마다 초기화된다.

class IniTest {
    static int nStatic = 0; // 정적 필드 선언문 초기화
    int nValue = 1;         // 인스턴스 필드 선언문 초기화

    {
        nValue = 2;         // 인스턴스 초기화 블록
    }

    static {
        nStatic = 1;        // 정적 초기화 블록
    }

    public IniTest() {
        nValue = 3;         // 생성자
    }
}

강의록의 실행 순서를 정리하면 먼저 정적 필드 선언문과 정적 초기화 블록이 실행된다. 객체를 만들 때에는 인스턴스 필드 선언문의 초기화, 인스턴스 초기화 블록, 생성자 순서로 진행된다. 따라서 위 객체가 완성되면 nValue의 최종값은 생성자에서 대입한 3이다.

필드 초기화 순서: 정적 필드 선언문 → 정적 초기화 블록 → 인스턴스 필드 선언문 → 인스턴스 초기화 블록 → 생성자. 앞의 초기값이 뒤 단계에서 다시 대입되면 마지막에 대입된 값이 남는다.

2. 객체를 이용한 필드 초기화

필드는 기본형 값뿐 아니라 다른 객체를 참조할 수도 있다. 다음 Rectangle 클래스의 originPoint 객체를 가리킨다. 기본 생성자는 원점을 만들고, 매개변수가 있는 생성자는 전달받은 점과 너비, 높이로 사각형을 초기화한다.

class Rectangle {
    public int width = 0;
    public int height = 0;
    public Point origin;

    public Rectangle() {
        origin = new Point(0, 0);
    }

    public Rectangle(Point p, int w, int h) {
        origin = p;
        width = w;
        height = h;
    }
}

new Rectangle(originOne, 100, 200)을 실행하면 사각형 객체의 origin은 이미 생성된 originOne 객체를 참조하고, 너비와 높이는 각각 100과 200이 된다. 이처럼 클래스의 필드로 다른 클래스의 객체를 두어 더 복합적인 대상을 표현할 수 있다.

3. 메소드 오버로딩

메소드 오버로딩은 한 클래스 안에 같은 이름의 메소드를 여러 개 정의하는 것이다. 단, 각 메소드는 매개변수의 개수나 자료형이 달라야 한다. 반환형만 다르게 바꾸는 것으로는 오버로딩할 수 없다.

public void println() { }
public void println(String x) { }

int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }

메소드를 호출하면 컴파일러가 전달된 인자의 개수와 자료형을 살펴 가장 가까운 매개변수 목록을 가진 메소드를 선택한다. System.out.println(), System.out.println("문자열"), System.out.println(241), System.out.println(34.5)가 같은 이름을 사용할 수 있는 이유가 오버로딩이다.

구분성립 여부이유
매개변수 개수가 다름성립호출 시 인자의 개수로 구분할 수 있다.
매개변수 자료형이 다름성립호출 시 인자의 자료형으로 구분할 수 있다.
반환형만 다름성립하지 않음호출식만으로 어느 메소드인지 결정할 수 없다.

제3장 객체 조합과 클래스 재사용

1. 객체를 필드로 갖는 클래스

새 클래스를 만들 때 이미 정의된 클래스의 객체를 필드로 포함하면 기존 기능을 재사용할 수 있다. 강의록의 Cylinder는 밑면을 나타내는 Circle 객체와 높이를 나타내는 정수 필드를 갖는다.

class Cylinder {
    private Circle c;
    private int height;

    public Cylinder(Circle a, int b) {
        c = a;
        height = b;
    }

    public double getVolume() {
        return c.getArea() * height;
    }
}

Cylinder는 원의 넓이 계산을 다시 작성하지 않고 CirclegetArea()를 호출한다. 반지름 3인 원과 높이 10을 전달하면 밑면의 넓이에 높이를 곱해 원기둥의 부피를 구한다. 이는 클래스가 다른 객체를 포함하는 합성 방식의 재사용 사례이다.

2. 합성과 상속의 차이

합성은 기존 클래스의 객체를 새 클래스의 데이터 필드로 포함하므로 “has-a” 관계라고 한다. 예를 들어 선은 시작점과 끝점이라는 점 객체를 가지며, 원기둥은 원을 밑면으로 가진다.

상속은 기존 클래스인 부모 클래스를 이용해 새로운 자식 클래스를 정의하는 방법이다. 두 클래스 사이에 “is-a” 관계가 있을 때 자연스럽다. 상속은 부모 클래스의 기능을 물려받아 확장하거나 특화하는 데 사용한다.

재사용 방법관계구현 방식
합성has-a기존 클래스 객체를 필드로 선언원기둥은 원을 가진다.
상속is-aextends로 부모 클래스를 확장관리자는 사원이다.

제4장 상속과 접근 범위

1. 클래스 상속

상속은 부모 클래스와 자식 클래스 사이의 관계이다. 자식 클래스는 부모 클래스의 필드와 메소드를 물려받고, 여기에 새로운 멤버를 추가하거나 일부 동작을 재정의할 수 있다. Java에서는 extends 키워드로 상속 관계를 선언한다.

class Manager extends Employee {
    // Employee의 특성을 물려받고 Manager의 특성을 추가
}

클래스 상속은 단일 상속만 가능하다. 즉 한 클래스가 직접 상속할 수 있는 부모 클래스는 하나이다. 반면 인터페이스는 여러 개를 상속하거나 구현하는 방식이 가능하며, 이는 다음 강의의 다형성과 연결된다.

2. 상속된 멤버와 접근 제한

class CSuper {
    private int f1;
    public int f2;

    public void setPrivate(int i) { f1 = i; }
    public void setPublic(int i) { f2 = i; }
    private void mPrivate() { f1 = 30; }
}

class CSub extends CSuper {
    private int f3;
    public int f4;
}

CSub 객체에서 공개된 f2, f4, setPrivate(), setPublic()은 사용할 수 있다. 그러나 f1mPrivate()은 부모 클래스의 private 멤버이므로 자식 클래스나 외부 코드에서 직접 접근할 수 없다. 자식의 f3 역시 private이므로 외부에서 직접 접근할 수 없다.

중요: 상속을 받았다는 사실이 부모의 모든 멤버에 직접 접근할 수 있다는 뜻은 아니다. private 멤버는 선언한 클래스 내부에서만 접근할 수 있으므로, 필요한 경우 부모가 제공하는 public 또는 protected 메소드를 통해 다룬다.

제5장 메소드 오버라이딩

1. 오버라이딩의 의미

메소드 오버라이딩은 부모에게 상속받은 메소드의 몸체를 자식 클래스에서 재정의하는 것이다. 부모와 자식에서 같은 이름의 메소드가 서로 다른 기능을 수행하게 된다. 오버라이딩하려면 메소드의 이름, 인자의 개수와 자료형, 반환형이 부모 메소드와 같아야 한다.

반환형은 서로 완전히 같거나 자식 타입의 반환형을 허용하는 관계여야 하며, 접근 제어자는 부모 메소드보다 범위가 같거나 더 넓어야 한다. 예를 들어 부모 메소드가 public이면 자식의 오버라이딩 메소드도 public이어야 한다.

2. 실행 시 선택되는 메소드

class Shape {
    public double getArea(double h, double w) {
        return h * w;
    }
}

class Triangle extends Shape {
    public double getArea(double h, double w) {
        return h * w * 0.5;
    }
}

Shape t = new Triangle();
System.out.println(t.getArea(3.0, 4.0));

참조 변수 t의 선언형은 Shape이지만 실제 객체는 Triangle이다. 호출된 메소드는 실제 객체가 재정의한 Triangle.getArea()이므로 결과는 6.0이다. 이 동작은 이후 배우는 다형성의 기반이 된다.

3. 오버로딩과 오버라이딩 비교

구분오버로딩오버라이딩
목적같은 이름으로 다양한 입력 처리상속받은 동작을 자식에 맞게 변경
적용 위치한 클래스 안에서도 가능부모와 자식 클래스 사이
매개변수개수나 자료형이 달라야 함개수와 자료형이 같아야 함
반환형반환형만 달라서는 성립하지 않음부모 메소드와 호환되어야 함

제6장 this와 super

1. this로 현재 객체 참조하기

인스턴스 메소드를 호출하면 숨은 인자로 현재 객체의 참조가 전달되며, 메소드 안에서는 이를 this로 사용할 수 있다. 필드와 매개변수의 이름이 같을 때 this.필드이름으로 현재 객체의 필드임을 분명히 할 수 있다. this.메소드이름()으로 현재 객체의 다른 인스턴스 메소드를 호출할 수도 있다.

class Circle {
    static double PI = 3.14;
    double radius;

    public double getArea() {
        return this.radius * this.radius * PI;
    }

    public void display() {
        System.out.println("반지름:" + this.radius
            + " 면적:" + this.getArea());
    }
}

2. super로 부모 멤버 참조하기

super는 현재 객체 안의 부모 클래스 부분을 가리키는 참조이다. 자식 클래스가 부모와 같은 이름의 필드나 메소드를 선언했을 때 super.필드이름 또는 super.메소드이름()을 사용하면 부모의 멤버를 선택할 수 있다. this와 마찬가지로 인스턴스 생성자와 인스턴스 메소드에서 사용하며 정적 메소드에서는 사용할 수 없다.

class CSuper {
    public double x = 0;
    public void f() { System.out.println("CSuper"); }
}

class CSub extends CSuper {
    public double x = 1;
    public void f() { System.out.println("CSub"); }

    public void print() {
        System.out.println(super.x);
        super.f();
    }
}

자식의 print()super.x를 통해 부모 필드의 값 0을 읽고, super.f()를 통해 부모의 구현을 호출한다. this.xthis.f()를 사용했다면 자식 클래스의 필드와 재정의된 메소드가 선택된다.

3. 같은 이름의 부모·자식 필드

class CSuper { public double x; }

class CSub extends CSuper {
    public double x;

    public CSub(double new_x) {
        this.x = new_x;
        super.x = new_x * 10;
    }
}

new CSub(10.0)을 생성하면 자식의 x는 10.0, 부모의 x는 100.0이다. 따라서 sub.xthis.x는 10.0을 가리키고, super.x를 반환하는 메소드는 100.0을 돌려준다.

제7장 상속과 생성자

1. this()와 super()

this()는 같은 클래스의 다른 생성자를 호출하고, super()는 부모 클래스의 생성자를 호출한다. 두 호출문은 생성자 몸체의 맨 앞에 위치해야 한다. 하나의 생성자에서 둘을 동시에 첫 문장으로 둘 수 없으므로 생성자 연결 구조를 알맞게 설계해야 한다.

상속 관계에서 객체를 만들 때는 부모 부분을 먼저 초기화해야 한다. 자식 생성자에 부모 생성자를 호출하는 문장이 명시되어 있지 않으면 컴파일러가 인자 없는 super() 호출을 자동으로 넣는다. 따라서 부모 클래스에 접근 가능한 인자 없는 생성자가 없다면 자식 생성자에서 알맞은 부모 생성자를 명시적으로 호출해야 한다.

생성 순서: 자식 객체를 생성하더라도 부모 생성자가 먼저 실행되고 그다음 자식 생성자가 실행된다. super(...)는 상속받은 필드를 포함한 부모 부분을 초기화하는 출발점이다.

2. 원기둥 클래스의 상속 예

class Cylinder extends Circle {
    private double height;
    static final double PI = 3.14;

    public Cylinder() {
        super();
        height = 1.0;
    }

    public Cylinder(double radius, double h) {
        super(radius);
        this.height = h;
    }

    public double getArea() {
        return 2 * PI * getRadius() * height
             + 2 * super.getArea();
    }

    public double getVolume() {
        return super.getArea() * height;
    }
}

매개변수가 있는 Cylinder 생성자는 super(radius)로 부모인 Circle의 반지름을 초기화하고 this.height로 자신의 높이를 초기화한다. 겉넓이 계산에서는 부모의 원 넓이를 super.getArea()로 사용하고, 부피 계산에서도 밑면 넓이를 재사용한다.

제8장 메소드 체이닝

1. 메소드 체이닝의 원리

메소드 체이닝은 하나의 명령문에서 같은 객체에 대해 메소드를 연속적으로 호출하는 기법이다. 체이닝에 참여하는 메소드는 작업을 마친 뒤 현재 객체의 참조인 this를 반환해야 한다. 반환된 객체를 대상으로 다음 메소드가 곧바로 호출된다.

class People {
    String name;
    int age;
    String address;

    public People setName(String name) {
        this.name = name;
        return this;
    }

    public People setAge(int age) {
        this.age = age;
        return this;
    }

    public People setAddress(String address) {
        this.address = address;
        return this;
    }
}

각 설정 메소드의 반환형을 void가 아니라 People로 선언하고 return this;를 실행하면 다음과 같이 연결할 수 있다.

People p = new People();
p.setName("홍길동").setAge(30).setAddress("서울");

이 방식은 같은 객체에 대한 연속 작업을 간결하게 표현해 프로그램의 가독성을 높인다. 반대로 메소드가 void를 반환하면 그 호출 결과를 대상으로 다음 메소드를 호출할 수 없으므로 체이닝이 중단된다.

핵심 개념 정리

클래스 정의와 사용

  • static 필드와 메소드는 객체가 아닌 클래스에 속하며, 정적 필드는 모든 객체가 공유한다.
  • final 필드는 값을 다시 대입할 수 없는 상수이고, final 메소드는 자식 클래스가 오버라이딩할 수 없다.
  • 정적 멤버 초기화 뒤 객체 생성 시 인스턴스 필드 선언문, 인스턴스 초기화 블록, 생성자 순서로 초기화된다.
  • 오버로딩은 같은 이름의 메소드를 매개변수 개수나 자료형이 다르게 여러 개 정의하는 것이다.

상속

  • 합성은 객체를 필드로 포함하는 has-a 관계이고, 상속은 extends로 부모를 확장하는 is-a 관계이다.
  • Java 클래스는 단일 상속을 사용하며, 부모의 private 멤버에는 자식이 직접 접근할 수 없다.
  • 오버라이딩은 부모 메소드와 같은 시그니처의 메소드를 자식에서 재정의하는 것이다.
  • this는 현재 객체, super는 현재 객체의 부모 클래스 부분을 참조한다.
  • this()는 같은 클래스의 다른 생성자, super()는 부모 생성자를 호출하며 생성자의 첫 문장이어야 한다.
  • 현재 객체를 반환하는 메소드들을 연결하면 메소드 체이닝을 구현할 수 있다.

최종 정리: 클래스의 재사용은 단순히 코드를 줄이는 기술이 아니라 객체 사이의 관계를 올바르게 모델링하는 과정이다. 공유 데이터에는 static, 변경을 제한할 때는 final, has-a 관계에는 합성, is-a 관계에는 상속을 적용한다. 상속 후에는 오버라이딩과 this·super를 통해 현재 객체와 부모 부분의 동작을 구분하고, 부모부터 자식으로 이어지는 초기화 순서를 정확히 이해해야 한다.

예상문제 20선

1. 여러 객체가 하나의 값을 공유하도록 선언하는 필드로 가장 알맞은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
static 필드는 클래스에 하나만 존재하므로 그 클래스의 모든 객체가 같은 값을 공유한다.

2. static 메소드에 관한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
정적 메소드는 클래스에 속하므로 Math.sqrt()처럼 객체 없이 클래스 이름으로 호출할 수 있다.

3. final 메소드의 특징으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
final 메소드는 정해진 구현이 자식에서 변경되지 않도록 오버라이딩을 금지한다.

4. 인스턴스 필드 선언문, 인스턴스 초기화 블록, 생성자가 모두 같은 필드에 값을 대입할 때 실행 순서로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
객체 생성 시 인스턴스 필드 선언문의 초기화, 인스턴스 초기화 블록, 생성자 순서로 실행된다.

5. 메소드 오버로딩을 성립시키는 조건은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
오버로딩은 같은 이름을 유지하면서 매개변수 목록을 다르게 정의한다. 반환형만 다른 것은 오버로딩이 아니다.

6. 원기둥이 Circle 객체를 필드로 가지도록 설계한 관계를 가장 잘 설명한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
다른 클래스의 객체를 데이터 필드로 포함하는 것은 “가지고 있다”라는 has-a 관계의 합성이다.

7. Java 클래스 상속에 관한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
Java의 클래스 상속은 단일 상속이며 extends로 하나의 부모 클래스를 지정한다.

8. 부모 클래스의 private 필드에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
private 멤버는 선언한 클래스 내부에서만 직접 접근할 수 있다. 자식은 부모가 공개한 메소드를 통해 사용할 수 있다.

9. 메소드 오버라이딩에 관한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
오버라이딩은 부모 메소드와 같은 시그니처를 유지하면서 자식에 알맞게 구현을 바꾸는 기능이다.

10. Shape t = new Triangle();에서 Triangle이 getArea()를 오버라이딩했다. t.getArea(3.0, 4.0) 호출 시 선택되는 메소드는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
오버라이딩된 인스턴스 메소드는 참조 변수의 선언형이 아니라 실제 객체의 구현이 실행된다.

11. 현재 객체의 필드와 매개변수 이름이 같을 때 현재 객체의 필드를 명확히 가리키는 표현은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
this는 현재 객체의 참조이므로 this.필드가 현재 객체의 인스턴스 필드를 뜻한다.

12. 자식 클래스에서 오버라이딩하기 전 부모 클래스의 메소드를 명시적으로 호출하는 표현은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
super는 현재 객체의 부모 클래스 부분을 가리키므로 부모가 정의한 메소드를 선택한다.

13. 부모와 자식이 모두 x 필드를 선언한 경우 부모의 x를 가리키는 표현은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
super.x는 부모 클래스에 선언된 필드를 선택하고, this.x는 현재 자식 객체에서 가까운 필드를 선택한다.

14. this()의 역할로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
this()는 현재 클래스 안의 다른 생성자로 초기화 작업을 연결할 때 사용한다.

15. 자식 생성자에 부모 생성자 호출을 명시하지 않았을 때 일반적으로 자동 삽입되는 문장은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
명시적 호출이 없으면 자식 생성자의 첫 부분에 인자 없는 부모 생성자를 부르는 super()가 자동으로 삽입된다.

16. 자식 객체를 생성할 때 생성자 실행 순서로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
자식 객체의 부모 부분을 먼저 초기화해야 하므로 부모 생성자가 실행된 뒤 자식 생성자가 실행된다.

17. Cylinder(double radius, double h) 생성자에서 super(radius)를 호출하는 주된 목적은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
super(radius)는 부모 클래스의 매개변수 생성자를 호출해 상속받은 원의 반지름 부분을 초기화한다.

18. 메소드 체이닝이 가능하도록 설정 메소드를 작성하는 방법은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
현재 객체를 반환하면 반환된 객체에 다음 메소드를 이어서 호출할 수 있다.

19. 다음 중 오버로딩과 오버라이딩의 비교로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
오버로딩은 같은 이름의 호출을 매개변수로 구분하고, 오버라이딩은 상속받은 동일 시그니처의 동작을 바꾼다.

20. 다음 중 thissuper에 관한 설명으로 옳지 않은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
정적 메소드는 특정 객체와 무관하게 실행되므로 현재 객체를 전제로 하는 thissuper를 사용할 수 없다.

댓글