본문 바로가기

분류 전체보기215

메소드 오버라이딩(+동적 바인딩) 메소드 오버라이딩(method overriding): 슈퍼 클래스의 메소드를 서브 클래스에서 재정의- 슈퍼 클래스에 있는 메소드로 목적하는 바를 이룰 수 없을 때 동일한 메소드를 서브 클래스에 다시 작성- 슈퍼 클래스 메소드의 이름, 매개변수 타입, 매개변수 개수, 리턴 타입 등 모든 것을 동일하게 작성- '슈퍼 클래스 메소드 무시하기' 혹은 '덮어쓰기'- 오버라이딩된 메소드가 무조건 실행되는 동적 바인딩 발생메소드 오버라이딩 사례Line line = new Line();line.draw();- new Line()에 의해 생성된 객체에는 2개의 draw() 메소드가 존재- 레퍼런스 line이 Line 타입이므로 컴파일러는 line.draw(); 실행 시 Line 클래스의 draw() 메소드를 호출Shap.. 2024. 5. 22.
업캐스팅과 다운캐스팅(+instanceof 연산자) 업캐스팅(upcasting): 서브 클래스 객체에 대한 레퍼런스를 슈퍼 클래스 타입으로 변환 - 자바에서 서브 클래스 객체는 슈퍼 클래스의 멤버를 모두 가짐- 서브 클래스의 객체를 슈퍼 클래스의 객체로 취급 가능- 업캐스팅은 슈퍼 클래스의 레퍼런스로 서브 클래스의 객체를 가리키게 함class Person{...}class Student extends Person{...}public class Main{ public static void main(String[] args){ Person p; Student s = new Student(); p = s; //업캐스팅 }}슈퍼 클래스인 Person 타입의 p가 서브 클래스인 Student의 객체를 가리키게 되지만.. 2024. 5. 22.
상속과 생성자 서브/슈퍼 클래스의 생성자 호출 및 실행  new에 의해 서브 클래스의 객체가 생성될 때 슈퍼 클래스의 생성자와 서브 클래스의 생성자가 모두 실행된다이 때 생성자의 호출 순서와 실행 순서가 반대이다. new 실행 시 서브 클래스의 생성자가 호출되고, 이는 슈퍼 클래스의 생성자를 호출한다. 호출된 슈퍼 클래스의 생성자는 자신의 코드를 실행하고, 이를 리턴하여 서브 클래스의 생성자를 실행한다.호출: 서브 → 슈퍼실행: 슈퍼 → 서브서브 클래스에서 슈퍼 클래스의 생성자 선택- 슈퍼 클래스와 서브 클래스 각각 생성자 여러 개 작성 가능- 서브 클래스의 각 생성자에 대해 함께 실행될 슈퍼 클래스의 생성자를 지정해야 함- super()을 이용하여 서브 클래스에서 슈퍼 클래스의 생성자 선택- 명시적으로 지정하지 않을.. 2024. 5. 21.
상속과 접근지정자 https://sysouthelloworld.tistory.com/24 접근 지정자패키지- 서로 관련 있는 클래스 파일(.class)들을 패키지에 저장하여 관리- 폴더 개념과 비슷- 자바 응용프로그램은 여러 개의 패키지로 구성 접근 지정자- public: 모든 클래스에 접근 허용- private:sysouthelloworld.tistory.com 슈퍼 클래스에 대한 접근 지정슈퍼 클래스 멤버에 접근하는 클래스 종류슈퍼 클래스 멤버의 접근 지정자privatedefaultprotectedpublic같은 패키지에 있는 클래스XOOO다른 패키지에 있는 클래스XXXO같은 패키지에 있는 서브 클래스XOOO다른 패키지에 있는 서브 클래스XXOO 슈퍼 클래스의 private 멤버- 슈퍼 클래스의 private 멤버는 .. 2024. 5. 21.
상속 객체 지향의 상속- 부모 클래스의 멤버를 자식 클래스가 물려받는 것- 부모 클래스의 멤버를 재정의할 필요 없음- 코드 중복을 제거하여 프로그램이 간결 객체 지향에서 상속의 장점멤버 중복 작성 제거 → 클래스의 간결화클래스의 계층적 분류 → 클래스 관리 용이클래스 재사용과 확장 용이 → 새로운 클래스 작성 속도 증가 → 소프트웨어 생산성 향상자바의 상속 선언- 부모 클래스: 슈퍼 클래스(super class)- 자식 클래스: 서브 클래스(sub class)- extends 키워드 사용(슈퍼 클래스를 확장한다는 개념) public class Person{ ...}public class Student extends Person{ //Person(슈퍼 클래스)을 상속받는 Student(서브 클래스) 선언 .. 2024. 5. 21.
final final 클래스: 클래스 이름 앞에 final을 사용하면 클래스를 상속받을 수 없음final class FinalClass{ //이 클래스는 상속 불가 ...}class SubClass extends FinalClass{ //상속 불가, 컴파일 오류 ...} final 메소드: final로 메소드를 선언하면 오버라이딩할 수 없음public class SuperClass{ protected final int finalMethod(){...} //finalMethod()는 자식 클래스에서 오버라이딩 불가}class Subclass extends SuperClass{ protected int finalMethod(){...} //오버라이딩 불가, 컴파일 오류}- 자식 클래스가 부모 클래스의 특정 메.. 2024. 5. 20.