본문 바로가기

Java/문법

(30)
10 - 5장 super 키워드와 super() 메서드 - this , this() : 클래스 자신의 내부 구성 요소를 호출하는 문법 요소 - this -> 자신의 객체 -> 인스턴스 메서드 내부에서 필드를 사용하거나 메서드를 호출할 때 참조변수명으로 사용 -> 생략했을 때 컴파일러가 자동으로 추가 - this() 메서드 -> 자신의 생성자 -> 자신의 또 다른 생성자를 호출하고, 생성자 내에서만 사용 가능 -> 항상 첫줄에 위치 1. 부모의 객체를 가리키는 super 키워드 - 필드명의 중복 또는 메서드 오버라이딩으로 가려진 부모의 필드 또는 메서드를 호출하기 위해 사용 1) 멤버 앞에 있는 참조 변수를 생략(this.)했을 때의 메서드 호출 package SuperKeyword; class A { void abc() { System.out.println(..
10-4장 인스턴스 필드와 정적 멤버의 중복 1. 인스턴스 필드의 중복 - 인스턴스 필드는 상속받은 필드와 동일한 이름으로 자식 클래스에서 정의해도 각각의 저장공간에 정의되므로 오버라이딩은 발생하지 않는다. - 클래스 B는 A를 먼저 상속받은 후 필드를 동일한 이름으로 선언하고, 값을 4로 초기화 class A { int m =3; } class B extends A { int m = 4; } 1) A a = new A(); -> a.m =3 - A() 생성자로 선언하고 A타입으로 선언 - 힙 메모리에는 m =3인 필드를 포함하고 있는 객체가 생성 - A 타입으로 선언돼 있으므로 참조변수는 이 A타입의 객체를 가리키고 있음 2) B b = new B(); ->b.m =4 - B()로 B 객체를 생성하는 과정에서 먼저 부모 객체인 A 객체가 먼저 생..
10-3장 메서드 오버라이딩 1. 메서드 오버라이딩의 개념과 동작 1) 메서드 오버라이딩 (overriding) - 부모 클래스에게 상속받은 메서드와 동일한 이름의 메서드를 재정의하는 것 - 부모의 메서드를 자신이 만든 메서드로 덮어씀 - 조건 ● 부모 클래스의 메서드와 시그너치 및 리턴 타입이 동일해야 함 ● 부모 클래스의 메서드보다 접근지정자의 범위가 같거나 넓어야 함 2) 클래스 A와 B의 상속관계 및 print() 메서드의 오버라이딩 class A { void print() { System.out.println("A 클래스"); } } class B extends A { void print() { //print() 메서드 재정의 -> 오버라이딩 System.out.pritnln("B클래스"); } ● A aa = new A(..
10-2장 객체의 타입 변환 1. 객체의 업캐스팅과 다운캐스팅 1) 업캐스팅 - 자식 클래스에서 부모 클래스 쪽으로 변환 - 컴파일러가 자동으로 넣어줌 2) 다운캐스팅 - 부모클래스에서 자식 클래스 쪽으로 변환 - 직접 명시적으로 넣어줘야함 - 잘못된 다운캐스팅을 수행하면 ClassCastException 예외 발생 3) 객체 타입 변환의 예 3)-1 사람 ClassCastException 예외 발생 - B() 생성자로 만든 A타입은 B타입으로의 다운캐스팅 가능 -> 객체 자체가 B타입으로 만들어져 있음 - B() 생성자로 만든 A타입을 C타입으로 다운캐스팅 불가 - 캐스팅 가능 여부는 무슨 타입으로 선언돼 있는지는 중요하지 않고 어떤 생성자로 생성됐는지가 중요 2. 메모리로 이해하는 다운캐스팅 AB 업캐스팅 B bb = new B..
10-1장 클래스 상속의 개념과 문법적 특징 상속 - 부모 클래스의 멤버(필드, 메서드, 이너 클래스)를 내려받아 자식 클래스 내부에 포함시키는 자바의 문법 요소 1. 상속의 개념 - 부모 클래스 : 사람 클래스 - 자식 클래스 : 대학생 클래스, 직장인 클래스 - 두 자식 클래스는 부모의 모든 멤버를 내려받기 때문에 대학생과 직장인 클래스 내에서는 추가 필드와 메서드만 구성하면됨 - UML로 상속을 표시할 때는 화살표를 부모 클래스 쪽으로 향하게 - 부모 클래스에서 자식 클래스로 갈수록 더 많은 특징과 기능이 구체화되므로 범위가 좁아짐(동물
9-2장 static 제어자 - static - 클래스의 멤버(필드, 메서드, 이너 클래스)에 사용하는 제어자 - 인스턴스 멤버(instance member) - 객체 안에 있을 때 상요할 수 있는 상태가 되는 멤버 - 정적 멤버(static member) - static이 붙어 있는 멤버 - 객체의 생성 없이 '클래스명.멤버명'만으로 바로 사용 가능 1. 인스턴스 필드와 정적 필드 class A { int m = 3; //객체를 생성한 후 사용 가능 static int n =5; //객체 생성 없이 사용 가능 } - 인스턴스 필드와 정적 필드의 메모리 구조 - 인스턴스 필드의 활용 방법 - 객체를 생성한 후에 사용 가능 A a = new A(); System.out.println(a.m); //3 - '참조 변수명. 인스턴스 필드..
9-1장 접근 지정자 - 자바 제어자 (modifer) - 클래스, 필드, 메서드, 생성자 등에게 어떠한 특징을 부여하는 문법 요소 - 접근 지정자 - 클래스, 멤버, 생성자 앞에 위치할 수 있으며, 사용 범위를 정의하는 역할 1. 멤버 및 생성자의 접근 지정자 - public > protected > default(package) > private - 아무것도 작성하지 않으면 default 접근 지정자가 자동으로 설정 - 멤버 및 생성자에서 사용하는 4가지 접근 지정자 Class Test { public int a; protected int b; int c; //default 접근 지정자 자동 설정 private int d; public void abc(); protected void bcd(); void cde(); //..
8-2 장 외부 클래스 1. 외부 클래스 (external class) - public 클래스의 외부에 추가로 정의한 클래스 - 1개의 자바 소스 파일에는 최대 1개의 public 클래스만 존재 가능. 그 클래스명은 파일명과 일치해야 함 - public 클래스가 아니면 다른 패키지에서 임포트할 수 없으므로 외부 클래스는 같은 패키지안에서만 사용 가능 BCD.java package abc.bcd; class ABC { //... //외부 클래스는 다른 패키지에서 임포트 불가능 } public class BCD { //... // public 클래스는 다른 패키지에서 임포트 가능 } - BCD.java 소스 파일에는 2개의 클래스(ABC, BCD)가 있음 - 소스 파일명이 BCD 이므로 public을 붙일 수 있는 자격이 있는 클..