728x90
반응형
728x90
반응형
인터페이스 default & static 만약 interface에 추상메서드를 추가하면 다른 interface의 메서드를 쓰는 클래스에 추가된 추상메서드를 전부 선언해야하는 불편함이 있다. 따라서 default값을 넣고 {} 중괄호를 붙여 선언하면 원하는 클래스에만 그 추상메서드를 선언할 수 있다 중괄호를 선언해서 몸통을 만들었기 때문에 생기는 문제점 2가지 여러 인터페이스 디폴트 메서드간의 충돌 이 경우 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야한다. 디폴트 메서드와 조상 클래스 메서드간의 충돌 이 경우 조상 클래스의 메서드가 상속되고 디폴트 메서드는 무시된다. class methodtest implements iftest{ public void method() { } } class..
패키지 Package 서로 관련된 클래스의 묶음 클래스는 .class 파일, 패키지는 폴더, 하위 패키지는 하위 폴더 rt.jar이 클래스들을 압축한 파일 java9 부터 module로 변경되어 잘게 쪼개짐 = 용량 간소화 목적 첫번째 문장으로 단 한번만 선언 같은 소스 파일의 클래스는 모두 같은 패키지(첫문장)에 속함 패키지 선언이 없으면 unnamed의 패키지에 선언이 됨 (이름없는 패키지) 클래스 패스(classpath) 제어판 > 환경변수 > 추가 > 명령 프롬프트에서 읽어올 파일 경로를 추가 추가할 때 이름은 classpath, 경로는 폴더에서 복붙 지정한 후 java (읽을 클래스 파일 정확하게 입력)
참조변수(super) IV, LV 구별에 사용되는 this 와는 다르게 super는 조상멤버와 자신의 멤버를 구별할 때 사용 super는 parent의 x로 구별하여 사용하고 this는 child의 x로 구별하여 사용함 일반 x는 child의 멤버변수로 오버라이딩되어 20으로 출력됨 조상의 변수가 존재하지만 자식의 변수가 존재하지 않을 때는 this를 사용해도 조상의 변수로 사용됨 ( = 10으로 통일) 출력문: x = 20 super.x = 10 this.x = 20 public static void main(String[] args) { child c = new child(); c.method(); } } class parents{ int x = 10; } class child extends pare..
단일 상속 Java는 단일 상속만을 허용한다. 아래와 같은 두개의 상속은 불가 ( C++만 가능) class SmartTv extends TV, option{ 따라서 비중이 높은 클래스는 상속으로, 비중이 낮은 클래스는 포함으로 하여 코드의 간결화 가능 아래는 SmartTV에서 비중이 높은? DVD클래스를 상속받고 TV클래스를 포함시켜 channel 값을 지정한 다음 메서드만 출력받아 아래와 같이 출력 출력문: 1 10 public static void main(String[] args) { SmartTv st = new SmartTv(); st.channel = 0; st.channelup(); System.out.println(st.channel); st.fast(); System.out.printl..
상속 inheritance 기존의 class에서 새로운 class를 작성하는 것 (코드의 재사용) 두 class를 부모와 자식의 관계로 맺어주는 것 상속 inheritance를 쓰는 이유 적은 양의 코드를 사용하여 새로운 class 작성 가능 공통적으로 코드를 관리 가능 (새롭게 추가 or 변경) = 유지보수 용이 아래와 같이 지정할 수 있음 extends 함수를 사용 class parents{} class child extends parents{} 자식은 조상(부모의 부모...부모) 모든 멤버 변수를 상속받는다 다만 생성자와 초기화 블럭 제외 따라서 자식의 멤버변수는 항상 부모와 같거나 많다 class parents{ int age; } class child extends parents{} // cla..