목록Java/객체지향 (41)
충분히 쌓여가는
패키지(package) 서로 관련된 클래스의 묶음 소스 파일을 컴파일: 클래스 -> 클래스 파일(*.class), 패키지 -> 폴더, 하위 패키지 -> 하위 폴더 클래스의 실제 이름은 패키지를 포함(java.lang.String) -> String의 실제이름이 java.lang.String 패키지 선언 패키지는 소스파일의 첫 번째 문장으로 단 한 번 선언 같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 된다 package OOP; public class PackageTest { public static void main(String[] args) { System.out.println("Hello World"); // Hello World } } class PackageTest2 { } 소스파일 안..
생성자 super() 조상의 생성자를 호출할 때 사용 조상의 멤버는 조상의 생성자를 호출해서 초기화 참조변수 super와 관계없다 (상속에서 생성자와 초기화 블록은 상속이 불가능하다) 잘못된 코드 Point3D라는 자손의 생성자가 this.x = x;로 조상의 멤버를 초기화하고 있다 -> 안되는 것은 아니지만 비추천 자손의 생성자는 자신이 선언한 것만 초기화해야됨 -> super(x, y)와 같이 조상의 생성자를 호출해야됨 조상이 선언한 멤버를 초기화하려면 조상의 생성자를 호출해서 조상의 생성자가 조상멤버를 초기화해야됨 생성자 super()의 추가 조건 생성자의 첫 줄에 반드시 생성자(super, this)를 호출해야 한다 호출하지 않을 경우 컴파일러가 생성자의 첫 줄에 super();을 삽입한다 해당 ..
참조변수 super 객체 자신을 가리키는 참조변수 인스턴스 메서드(생성자)내에만 존재, static 메서드 내에서 사용불가 조상의 멤버를 자신의 멤버와 구별할 때 사용 참조변수 this와 참조변수 super의 차이 this: iv와 lv를 구별할 때 사용 super: 조상멤버와 자신멤버 구별할 때 사용 public class superTest { public static void main(String[] args) { Child c = new Child(); c.method(); } } class Parent { int x = 10; // super.x } class Child extends Parent { int x = 20; // this.x void method() { System.out.print..
오버로딩과 오버라이딩은 이름만 비슷하고 완전히 다르다(둘이 관계가 없다) 오버로딩: 기존에 없고 이름이 같은 새로운 메서드를 정의하는 것(상속하고 관계가 없다) 오버라이딩: 상속받은 메서드의 내용을 변경하는 것 class Parent { void parentMethod() {} } class Child extends Parent { void parentMethod() {} // 오버라이딩 void parentMethod(int i) {} // 오버로딩 void childMehtod() {} // 새로운 메서드 정의 void childMehtod(int i) {} // 오버로딩 void childMehtod() {} // 중복정의 -> 에러 }