ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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!

    - 부모는 자식에 대한 정보가 없기 때문에 형변환이 불가하다( 에러발생) 

     

    [자바] 상속 사용방법

    자바에서 상속의 사용방법! // 상속 // 가급적 클래스는 내용이 적더라도 따로 만들기 // 생략하는 것을 default라고 한다. // 컴파일러가 import java.lang.*;을 자동 추가해준다. class Parent { // 컴파일러가..

    jinsiri.tistory.com

    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(); 

     

    반응형

    댓글

Designed by Tistory.