2017.05.19
[상 속]
※ 맨 밑에 참조에 캡쳐한 코딩 있습니다.
* VO : 내가 만들어낸 새로운 자료형
* 캡슐화, 상속, 다형성
* 상속 : 뒤를 잇다, 이어받다, 물려받다.
- ex) 네 발 자전거를 만들고 싶다. 자전거 사다 보조바퀴 다는것이 빠름 편함.
- 확장하는 개념이다. 원하는 데이터를 가져와서 기능을 추가 하는 것이다.
- JAVA의 상속 : 기존 클래스의 변수(데이터)와 메소드(로직, 코드)를 물려받아 기능이 추가 된 클래스를 구성하는 것.
- 부모 클래스 = 수퍼 클래스, 자식클래스 = 서브클래스
- 자식 클래스는 부모 클래스의 기능을 모두 사용 할 수 있지만 반대는 안된다.
- 단, 자바에서는 다중 상속이 불가능 하다.
ex)
~ 부모 : 마우스 1, 마우스 2, 자식 : 휠마우스,
~ 휠마우스에 클릭 호출~! -> 마우스 1의 클릭을 가져올지, 마우스 2의 클릭을 가져올지 정하질 못해서 오류가 난다.
- 상속의 횟수는 정해지지 않았다
ex)
~ 부모1 -> 자식1// 자식1=부모2 -> 자식2 // 자식2=부모3 -> 자식3 ***
* 상속의 필요성
ex)
- class 마우스 : 클릭하기 메소드. 우클릭 하기 메소드, 드래그하기 메소드
- class 휠 마우스 : 클릭하기 메소드. 우클릭 하기 메소드, 드래그하기 메소드, 스크롤하기 메소드
- class 인체공학 메소드 : 클릭하기 메소드. 우클릭 하기 메소드, 드래그하기 메소드, 피로감소 메소드
=> 클래스에 있는 공통점을 빼서 부모 클래스를 만든다~!!(class 마우스가 부모클래스가 된다.) -> 추상화 과정
- 새로운 기능을 추가하고 싶으면 마우스 클래스를 불러와 기능만 추가하면 된다.
ps. 자바 배운지 1달 됬는데 상속을 이용해서 프로그래밍을 하게 된다면 여기 있으면 안된다. => 도전목표가 되겠군~!! ㅎㅎ
* 상속을 사용해서 얻는 장점
- 기존 클래스의 변수와 코드를 재사용 -> 간결화
- 먼저 작성된 검증된 프로그램을 재사용 - > 신뢰성, 신속성
- 클래스간 계층적 분류 및 관리 -> 유지보수 용이
* 접근제한자 종류
: public, protected, default, private
- 프라이빗(private) 개인주의 : 본인 클래스 안에서만 사용, 외부 클래스에서 조작 불가 (데이터 은닉)
- 퍼블릭(public) : 온동네 사람들이 다 쓴다. Test클래스에 대한 객체만 생성되면 생성된 어디서든 사용가능
- 디폴트(default) : 안 붙였을때 기본적으로 붙여지느 것이다. 직접 붙이면 에러뜸. 디폴트의 사용범위는 같은 패키지 내에서만 사용가능하다. 다른 패키지에서 객체가 생성되어도 사용 불가.
- 프로텍티드(protected) : 퍼블릭보다 효용범위가 작지만 퍼블릭이랑 거의 비슷하다. 온동네 사용 가능하다. 퍼블리과 유사하지만 (동일 패키지가 아니고 상속받지도 않았을 때) 두 가지 조건 모두 만족하면 사용불가.
[출처] (자바) private, public, default, protected 변수의 의미와 사용가능 범위|작성자 찡꽁빵꽁
* protected 제한을 걸어 놓으면 다른 패키지에서 상속을 받았을 때 사용이 가능하지만, default 제한을 걸어 놓으면 사용할 수 없다.
* 다른 클래스의 정보를 가져오기 위해서 클래스 옆에 extends 를 입력해준다.
ex) public class UseClass extends Useclass2() { }
* 다른 패키지에서 다른 패키지 클래스를 상속받고 싶으면 import로 패키지와 클래스 명을 적어줘야 한다.
ex)
package Package2;
import Package1.DataClass;
public class UseClass2 extends DataClass{
public void print() {
System.out.println(num1);
}
}
- 자식(서브클래스)이 자동으로 부모(슈퍼클래스) 타입으로 변환되는 것
- 중요성
ex)
*다운 캐스팅
- 업캐스팅 된 것을 다시 원래대로 되돌리는 것, 업캐스팅과 달리 명시적으로 타입을 지정해야 한다.
* 제네릭스
ArrayList<> a = new ArrayList<>();
- 제네릭스 : <> 안에는 객체형만 들어갈 수 있다. String은 객체자료형이라 들어갈 수 있었던 것이고 int나 double은 들어갈 수 있는데, 이것을 들어가게끔 해주기 위해선 첫 문자를 대문자로 해주어야 한다. 하지만 int만 Integer로 적어줘야 한다.
-
ArrayList<Object> a = new ArrayList<Object>();
a.add(12);
a.add(18.8);
System.out.println(a.get(1) + a.get(2));
이것은 객체와 객체의 연산이라 불가능 하다. 즉 다운캐스팅으로 명시적형변환 해주고 연산을 해줘야 한다.
※ 참조
'Program Language > Java' 카테고리의 다른 글
[JAVA] SQL_3 (0) | 2017.05.31 |
---|---|
[JAVA] JDBC_2 (1) | 2017.05.30 |
[JAVA] JDBC (0) | 2017.05.29 |
[JAVA] SQL (0) | 2017.05.29 |
[JAVA] JAVA (0) | 2017.05.02 |