728x90
반응형
class 자식클래스 extends 부모추상클래스 (){}
상속케이스(확장,실체화)
1) Chc [extends] PaC
2) Chc [extends] PaAC
3) Chc [implements] PaI
4) ChI [extends] PaI
5) ChAC [ implements ] PaI
Color.java
package interfaceex; class Triangle implements Color { //상속받은 자식클래스에서 재정의, 접근제어자 public int color = 0; //변수. interface내 상수와 혼동x @Override public int getColor() { return color; } @Override public void setColor(int c) { color = c; } } public class ColorInterEx03 { public static void main(String[] args) { Triangle ref = new Triangle(); ref.setColor(Color.RED); switch (ref.getColor()) { case 1: System.out.print(" 빨간색"); break; //switch케이스문의 종료 case 2: System.out.print(" 초록색"); break; case 3: System.out.print(" 파란색"); break; } System.out.println(" 삼각형"); } }
package interfaceex; public interface Color { // public static final 생략된 것이므로 상수 int RED = 1; int GREEN = 2; int BLUE = 3; // public abstract 생략된 것이므로 추상메소드 void setColor(int c); int getColor(); }
빨간색 삼각형
POJO(Plain Old Java Object) |
||
: 기존의 순수한 자바 객체 <조건> 1. 멤버필드가 (권장) private처리되어야 한다. 2. 멤버필드의 값을 설정하거나, 얻어갈 수 있는 public getter, setter 메소드가 존재해야 한다. 3. |
[접근제어자] [기타제어자] class 클래스명 { private 자료형 필드명; .... public 리턴타입 getter메소드(){ return 값; } public void setter메소드(매개변수){ 멤버필드 초기화 명령문 기술 //this.멤버필드명 = 매개변수명;} } |
private int cnt; public int getCnt {return cnt;} public void setCnt(int cnt){this.cnt = cnt;} |
Test.java
package interfaceex; //PaTest pt = new PaTest(); //인터페이스는 객체생성 불가 //PaTest pt = new Test(); interface PaTest { String KIND = "사람"; //public static final 생략가능 void trueKind(); //public abstract 생략가능 ->자식클래스에서 재정의 void falseKind(); //public abstract 생략가능 ->자식클래스에서 재정의 } public class Test implements PaTest { private String name; //private로 접근불가 private int age; //단축키 : Alt + Shift + s //마우스우버튼 Source > Generate Constructor using Fields... public Test() { } public Test(String name, int age) { super(); this.name = name; this.age = age; } //단축키 : Alt + Shift + s + r //마우스우버튼 Source > Generate Getters and Setters public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public void trueKind() { System.out.println(KIND + "입니다."); } @Override public void falseKind() { System.out.println(KIND + "이 아닙니다."); } }
XInterEx06.java
package interfaceex; class InterfaceClass implements Z { //{}중괄호 이내 자식 Override 메소드 기술해야함 public void xmeth1() { System.out.println("xmeth1() 메소드의 구현"); } public void xmeth2() { System.out.println("xmeth2() 메소드의 구현"); } public void ymeth1() { System.out.println("ymeth1() 메소드의 구현"); } public void zmeth1() { System.out.println("zmeth1() 메소드의 구현"); } } public class XInterEx06 { public static void main(String[] args) { InterfaceClass ic = new InterfaceClass(); ic.xmeth1(); ic.xmeth2(); ic.ymeth1(); ic.zmeth1(); } }
package interfaceex; public interface X { void xmeth1(); //{}몸체없음, public abstract void xmeth2(); } interface Y { void ymeth1(); } interface Z extends X, Y { //두 개의 인터페이스 상속하는 경우에는 override하지 않음 void zmeth1(); }
xmeth1() 메소드의 구현 xmeth2() 메소드의 구현 ymeth1() 메소드의 구현 zmeth1() 메소드의 구현
static메소드는 Override 안 됨.
인터페이스의 static메소드 또한 오버라이드 되지 않으며, 반드시 인터페이스명으로만 접근 가능함.
인터페이스 자료형으로 만든 객체명으로 접근 불가
상속받은 자식에서 재정의하지 않아도 사용가능하다.
인터페이스에 선언된 default메소드는 접근제어자와는 조금 다른 의미를 지닌다.
실제로는 public default로 기술해야하며, 몸체를 구현할 수 있다는 의미를 가진다.
상속받은 자식에서 재정의하지 않아도 사용가능하다.
인터페이스의 private메소드는 상속불가, 재정의 불가하다.
따라서 동일한 메소드가 자식에 존재해도 별도의 독립적인 영역의 메소드로 인식한다.
AInterEx04.java
package interfaceex; class A1 implements A { int a = 10; static final int CONS = 2; //public A1(){} 숨김 @Override public void display(String s) { System.out.println("display 메소드 구현 " + s); } @Override public void imd() { System.out.println("imd메소드 재정의"); } //Override x static int stmd(int c) { return CONS+c; } //Override x void pmd() { System.out.println("A1인터페이스 안의 pmd: " + CONS); } } public class AInterEx04 { public static void main(String[] args) { //인터페이스 타입의 객체는 인터페이스에서 선언된 상수와 메소드(오버라이드 포함)에만 접근 A ob = new A1(); //p-c케이스 ob.display("테스트1"); System.out.println("A의 상수 값은 " + ob.CONS); // System.out.println("A1의 a 값 출력" + ob.a); System.out.println("A.CONS: " + A.CONS); // ob.pmd(); //private으로 접근불가 //인터페이스의 static메소드는 객체명으로 접근 불가, 오버라이드 불가 // System.out.println(ob.stmd(5));//인터페이스명. 으로 접근 A1 ob2 = new A1();//c-c ob2.display("테스트2"); ob2.pmd(); ob2.dfmd("하하하"); System.out.println("A의 상수 값은 " + ob2.CONS); System.out.println("A1.CONS: " + A.CONS); //인터페이스명.으로 접근 System.out.println("A1의 a 값 출력 " + ob2.a); System.out.println("ob2.stmd(8) 결과 : "+ ob2.stmd(8)); //static System.out.println("A.stmd(7) 결과 : " + A.stmd(7)); } }
package interfaceex; public interface A { final int CONS = 5; //public static 생략됨. final도 생략가능. 상수 public void display(String s); //{}몸체가 없음 abstract void imd(); //public abstract 키워드 생략된 것임 //[public] default가 원래 기술형식임 default void dfmd(String str) { System.out.println("A인터페이스 안의 dfmd메소드의 str변수 값: " + str + "와 CONS의 값: " + CONS); } //@Override 기술을 통해 재정의 여부 확인가능 static int stmd(int c) { return CONS+c; } //static키워드가 붙은 메소드는 Override안 됨 private void pmd() { //자바 9버전 이상부터 가능 //인터페이스 내 private은 상속되지않는다. System.out.println("A인터페이스 안의 pmd"); } }
display 메소드 구현 테스트1 A의 상수 값은 5 A.CONS: 5 display 메소드 구현 테스트2 A1인터페이스 안의 pmd: 2 A인터페이스 안의 dfmd메소드의 str변수 값: 하하하와 CONS의 값: 5 A의 상수 값은 2 A1.CONS: 5 A1의 a 값 출력 10 ob2.stmd(8) 결과 : 10 A.stmd(7) 결과 : 12
AInterEx05.javapackage interfaceex; class C1 implements A { public void display(String s) { System.out.println("클래스 C1 객체 이용 : " + s); } public void imd() { System.out.println("imd메소드 재정의"); } } class C2 implements A { public void display(String s) { System.out.println("클래스 C2 객체 이용 : " + s); } public void imd() { System.out.println("imd메소드 재정의"); } } class C3 implements A { public void display(String s) { System.out.println("클래스 C3 객체 이용 : " + s); } public void imd() { System.out.println("imd메소드 재정의"); } @Override public void dfmd(String str) { int a = 5; System.out.println("C3클래스 안의 dfmd메소드의 str변수 값: " + str + "와 CONS의 값: " + CONS + "와 a의 값: " + a); } public void dfmd() {System.out.println("dfmd()메소드 오버로딩");} static int stmd(int a) {return CONS+a;} //상속관계에서도 메소드 오버로딩 가능하다. } public class AInterEx05 { public static void main(String[] args) { A memo; //A인터페이스 자료형 선언만 memo = new C1(); memo.display("안녕하세요? "); memo = new C2(); //주소값이 바뀜 memo.display("알기쉽게 해설한 자바."); memo = new C3(); memo.display("자바를 자바봅시다."); memo.dfmd("\"안녕 자바\""); System.out.println(A.stmd(5) + C3.stmd(1)); //static // System.out.println(A.stmd(2) + memo.stmd(1)); //인터페이스내 static 메소드는 객체명으로 접근불가 } }
클래스 C1 객체 이용 : 안녕하세요? 클래스 C2 객체 이용 : 알기쉽게 해설한 자바. 클래스 C3 객체 이용 : 자바를 자바봅시다. C3클래스 안의 dfmd메소드의 str변수 값: "안녕 자바"와 CONS의 값: 5와 a의 값: 5 16
728x90
반응형
'[JAVA]' 카테고리의 다른 글
[15일차 오전] Math random split StringBuffer (0) | 2024.01.02 |
---|---|
[14일차 오후] (0) | 2023.12.29 |
아스테리스크 Wraper 상속 오버라이딩 this super 추상클래스 어노테이션 (0) | 2023.12.28 |
[13일차 오후] 추상클래스, 어노테이션, 인터페이스 (0) | 2023.12.28 |
[13일차 오전] (0) | 2023.12.28 |