Ⅳ. 필드와 static 멤버(필드/메소드)의 중복 1. 인스턴스 필드는 오버라이딩이 되지 않음 ※ 오버라이딩 : 덮어쓰는 기능 - 서로 다른 메모리를 가지므로 불가능 // Example 인스턴스 필드의 중복 package sample; class A { int m = 3; } class B extends A { int m = 4; } public class Main { public static void main(String[] args) { // 1. 객체생성 A aa = new A(); B bb = new B(); A ab = new B();// 참조 변수에 따라서 결정됨 (A) // 2. 인스턴스 필드 System.out.println(aa.m);// 3 System.out.println(bb.m)..
Ⅲ. 메소드 오버라이딩(Overriding) 1. 메소드 오버라이딩(Overriding) - 메소드 오버라이딩 - 부모클래스에게 상속받은 메소드를 재정의하여 사용 (덮어쓰기 개념) - 메소드 오버라이딩을 위한 조건 - 부모클래스의 메소드와 시그니처 및 리턴 타입 동일 - 부모클래스의 메소드보다 접근지정자는 같거나 넓어야 함 2. 메소드 오버라이딩 (Method Overriding)의 메모리 구조 - 객체내에 동일한 멤버가 두개 이상 있는 경우 : 참조변수가 가리키는 객체의 바깥쪽부터 안쪽으로 들어가면서 첫번째 만나는 멤버가 실행 ※ 메소드 오버라이딩 효과 - 메모리를 재사용하므로 메모리 절약 - 메소드명을 재사용하므로 기능 파악 용이 // Example1 package sample; class A { v..
Ⅱ. 객체의 타입변환 1. 객체의 타입변환 (업캐스팅과 다운캐스팅) - 상속관계에 있는 경우 객체도 타입변환이 가능 - 업캐스팅은 항상 가능 : 생략시 컴파일러에 의해 자동캐스팅 - 다운캐스팅은 때에 따라서 가능/불가능 : 가능한 경우에만 수동으로 직접 캐스팅 필요 // Example package sample; class A {} class B extends A{} class C extends B{} class D extends B{} public class Test { public static void main(String[] args) { // 1. 업캐스팅 (자동변환): 생략시 컴파일러가 자동 추가 // ※ new 를 무엇으로 했느냐가 중요 A ac = (A)new C(); // C->A 업캐스팅..
Ⅰ. 클래스의 상속 1. 상속의 개념 - 상속 : 기존의 클래스로부터 자원을 물려받아 재사용하는 것 (상속은 확장의 개념) ※ 자바에서 만드는 모든 클래스는 자바 기본 클래스인 Object의 자식임 - 부모클래스의 멤버(필드, 메소드, 이너클래스)를 자식클래스가 내려받아(상속) 클래스 내부에 포함 - 자바의 상속은 오로지 위에서 아래로만 진행 - 물려주는 클래스 : 부모클래스, 상위클래스, 슈퍼클래스, 기초클래스 - 물려받는 클래스 : 자식클래스, 하위클래스, 서브클래스, 유도클래스 // Example package Sample; // class : 참조자료형(객체를 만드는 자료형)을 설계한 것 // 접근 제어 지시자 : 사용 가능 범위를 선언함 class Human { String name; int a..
Ⅱ. Static 1. static(정적) 키워드 (필드) - 정적 멤버로 선언 ※ 정적 멤버 : 선언되는 순간부터 프로그램 종료시까지 존재하는 멤버 - 객체생성 없이 바로 사용 가능 (static 메모리 영역에 따로 저장됨) ※ 동적 할당(Dynamic Allocation) : c언어(자바)에서 힙 영역에 메모리를 할당받는 작업 → 참조자료형 기반으로 객체 생성 // Example 인스턴스 필드와 정적필드의 활용 방법 package sample; class A { int m = 3;//인스턴스 필드 (논스태틱 멤버) static int n = 5;//정적(static) 필드 (스태틱 멤버) } public class Main { public static void main(String[] args) { ..
Ⅰ. 접근지정자 (접근제어자) ※ 제어자 : 어떤 자원에 대해 기능을 제한하거나 확장하는 키워드 1. 멤버 및 생성자의 접근지정자 ※ 접근 지시 제어자 : 자원의 활동 범위를 지시함 - 멤버 및 생성자에서 사용되는 4가지 접근지정자 (public, protected, default, private) ※ default 는 아무것도 안 쓴 것이므로 사실상 접근지정자는 3개임 - 멤버 및 생성자에서 사용되는 4가지 접근지정자의 사용가능 범위 - 접근 가능한 범위 : public > 아무것도 안 쓴 것 > protected > private - public : 프로젝트의 아무 곳에서나 쓸 수 있음 - private : 클래스 바깥에서는 쓸 수 없음 - protected : 클래스 및 상속 관계에서는 쓸 수 있음..