추상화

 

1. Abstract Methods 추상 메소드  (Override의 강제성을 주기위해 사용한다)

 1) 바디를 정의하지않는 메소드로 상속해 줄 수 있으며 이를 상속 받은 클래스는 반드시 재 정의 해야한다.(Overriding)

 public class AbstractDemo {
 public static void main(String[] args) {
  Jasic j = new Jasic();
  j.display();
 }
}

abstract class Bumo{  // abstract 메소드를 가지고있는 클래스 역시 absract로 선언.
 abstract void display(); // 바디를 정의하지않는 메소드는 앞에 abstract를 선언해야한다.
}
class Jasic extends Bumo{
 void display(){
  System.out.println("son");
 }
}

 

2. Abstract Class 추상 클래스

 1) new로 생성할 수 없다. (인스턴스화 할 수 없다, 메모리에 올릴 수 없다)

 2) abstract 메소드가 없는 정상적인 Class  역시 Abstract로 선언 할 수 있다.

 

3. Interface : implements로 상속(구현한다)받는다.

 1) public abstract static 을 생략한 클래스라고 생각하면된다.

 2) interface속의 변수는 public static final이 생략되어있다. 따라서 모두 초기화를 해야한다.

 3) interface의 메소드는 public abstract가 생략되어있다.

 4) interface의 하위클래스는 반드시 메소드 재정의 해야한다.

 5) extends를 먼저 선언한후 implements를 쓴다. 

 6) 하위 클래스에서 인터페이스의 메소드를 재정의할 때 반드시 public을 써야한다.

 7) Interface Type의 레퍼런스변수는 해당 인터페이스 리소스만 접근가능.

 8) Interface Type의 배열을 생성할 수 있는데, 이는 interface자식들의 주소를 받을 수 있는 수첩이다.

 9) Interface속에있는 변수는 클래스변수이기 때문에 interface이름으로 접근한다.

 

4. flag interface : 멤버가 하나도 없는 인터페이스

 1) ex : clone() 사용.

   - Cloneable : 모든 클래스가 값을 복사 할 수 있는 권한이 없다. 그래서 권환을 확인하는 인터페이스.

 public class CloneDemo {
 public static void main(String[] args) {
  Demo original = new Demo(5);
 // Demo copy = original; //주소복사
 // Demo copy = (Demo)original.clone(); //사용할 수 없음.
  Demo copy = original.copy();
 }
}
class Demo implements Cloneable{ // 멤버가 없는 인터페이스 이지만 상속 받을 경우 copy권한을 얻게된다.
 private int su;
 public Demo(int su){
  this.su = su;
 }
 public void set(int su){
  this.su = su;
 }
 public int get(){
  return this.su;
 }
 public Demo copy(){
  Object obj = null;
  try {
   obj=clone();
  } catch (CloneNotSupportedException e) {
   System.out.println("복제 실패함");
  }
  return (Demo)obj;
 } 
}

 

 

5. Package

 1) class를 묶는 단위. (보통 도메인을 사용하여 com.javasoft.lib.Demo 형식으로 작성한다)

 2) cmd 에서 컴파일 할 때 -d 옵션으로 경로를 설정해야한다.

 javac–d D:\project\first Employee.java

 3) 클래스 패스 설정 : 변경되지 않는 경로를 가지고있다면 환경변수에서 지정하면된다.

 4) jar 파일 만들기. (유닉스의 tar과 같다.)

   - 압축 상태의 클래스파일들을 사용할 수 있다.

   - jar파일의 경로를  import하여 사용 할 수 있다.

 5) eclipse 에서 외부 jar 가져오기.

   - 프로젝트 선택 마우스오른쪽 -> build path -> add Archive..

 6) 도스와 eclipse 환경에서의 Package 접근이 약간 다르다. (

 public class Resume {
 private int a =5;
 int b = 10; // default는 하위 클래스도 접근 불가능
 protected int c = 100;  //상속되며 하위 클래스를 통해 접근이 가능
 public int d =5000; //다른 패키지에서도 접근 가능.
}

 

 

6. Import static

import static java.lang.System.*;
import static java.lang.Math.*;  //or import static java.lang.Math.random    메소드뒤에 ()까지 쓰면 안된다.

public class StaticImportDemo {
 public static void main(String[] args) {
  out.println("hello,world");  //System 클래스를 import했기때문에 쓰지않아도 된다.
  int r = (int)(random()*10+1);
 }
}

 

 

  

 

 

 

ps-------------------------------------------------------------------------------------

1. absract 와 final은 상극

2. this()와 super()는 상극

3. shallow copy : 주소복사 / deep copy : 값복사

+ Recent posts