-
5. 자바의 객체 지향이란? (OOP)program_language 및 궁금한것/Java 2019. 4. 12. 18:38
오늘의 날씨: 화창함
자바의 객체지향(OOP)
객체지향이란 재활용가능한 클래스를 만들어서 사용하는것(레고처럼)
1. 캡술화 : 피리드와 메소드를 묶어
- 정보은닉
- 독립적으로 실행할 수 있는 모듈성
2. 상속 ★
- 클래스 간의 상속
- 부모가 갖는 자원(필드, 메소드)을 아낌없이 물려주는 것
- extands를 사용한다. (확장) <-- is a 관계
- 자식클래스의 것을 부모는 사용할 수 없다.
- 단일 상속이 기본원칙 (다중상속도 있다)
- 자식클래스는 부모 클래스로 형변환이 가능하다.
- 부모클래스(상위클래스) super
- 자식클래스(하위클래스, 확장클래스) sub
** Object클래스 <--- 최상위 클래스
class Parent extends Object{ // extends Object생략되어있음 } class child extends Parent{ // 기존 + 확장 }
Parent p(부)= new Child()(자) ; // 잘 실행됨
Child c=new Parent(); // 부모는 자식으로 변환할 수 없다.
* 나는 부자 되겠다~~! *
...더보기- 자식은 부모다!!
- Child클래스는 Parent클래스로 형변환이 가능하다.
- Parent 변수명 = Parent!
- 부모는 자식에 대한 정보가 없기 때문에 형변환이 불가하다( 에러발생)
3. 다형성
- 메소드 오버라이딩(MethodOverriding) ★★ <-- 메소드 재정의
: 상속에서 나온 개념
: 부모가 갖는 메소드를 자식클래스에서 재정의
: 자식쪽을 뜻한다
- 메소드 오버로딩(MethodOverloading) <-- 다형성
: 한 클래스 내에 동일한 메소드를 여러개 구현
(단, 인자의 갯수가 다르거나 자료형이 달라야 한다.)
상속...
...더보기상속에 관하여...
class Parent extends Object{ } <-- 빨간건 눈에 보이진 않는다.
Parent p = new Parent( ) ;
메모리에 적재 - 인스턴스가 된다. 자바의 new는 동적메모리 이다. GC가 알아서 제거를 해준다.
1. p.toString <-- 변환메소드 실행이 잘된다. Parent의 부모인 Object에 있는 클래스 이기 때문이다.
2. Child c = new Child( ) ;
c.hello( ); <-- Child클래스에서 찾다가 상위클래스에서 생성
3. Parent p2= new Child() 또는 Parent p2=c ;
4. Child c2= new Parent( ) ; <-- 에러가 난다. 부자가 아니라서
---Child 객체 선언 후 parent를 넣어줘야 한다. Child가 없어서 나는 에러이다.
Parent p2=c , Child c2=p2 ; <---에러가 난다. c2=c가 되기 때문이다.
Child c2=(Child) p2; <-- 실행 가능하다.
** 자부는 꿈도 꾸지 마시오. 부자만 가능하다.(부모 - 자식)
4. 생성자 Constructor
- 새로운 객체를 생성하기 위해서 초기화해주는 메소드
1. 생성자의 이름은 반드시 클래스명과 일치해야 합니다. (대소문자 일치)
2. 리턴자료형을 명시하지 않는다. (void조차 x)
--------1,2번: 일반메소드와의 차이점-----------
3. 객체 생성시 자동으로 호출
4. 클래스내에 생성자가 하나도 없다면 자바컴파일러가 컴파일시 자동으로 추가
** 주의) 만약, 클래스내에 한개 이상의 생성자가 정의 되어 있다면 컴파일러는 소스코드에 관여하지 않는다.
...더보기소스
class Abc{
int su;
My my;
Abc( ) { //기본생성자(매개변수 비어있는 생성자) <-- 초기화 (값할당) 메소드
//맴버필드에 대한 초기화 작업
su=10;
my=new My();
// (일반메소드 호출 전 1번 해야하는) 선행작업
}// 생성자
Abc(String name){ // 오버로딩 생성자
}
ABc(int age){ //오버로딩 생성자
//<-- ABc !=Abc 클래스명과 일치하지 않으므로 일반메소드!
//<-- 리턴 자료형을 명시하지 않았음!
}
void hello(){
}
}// class Abc
Abc a= new Abc(); // 메모리 할당 후 가장먼저 기본 생성자 호출
a.hello(); //<-- 이름을 일치시켜 호출시킨다.
Abc a2 = new Abc("길동"); // <-- 오버로딩생성자 호출!
a2.hello();
반응형'program_language 및 궁금한것 > Java' 카테고리의 다른 글
6. 접근제한자와 this , Interface (0) 2019.04.15 이클립스 사용 단축키 (0) 2019.04.15 4. 자바의 입력 (0) 2019.04.11 3. 연산자들, 조건문, 반복문 (0) 2019.04.09 2. 자바란? (JVM, 구성요소, 자료구조) (0) 2019.04.08