뉴렉처 과정 기록 (Backend)/JAVA

04/01 JAVA 생성자, 오버로드(Overload) / 객체의 참조형식

yeonee3219 2021. 4. 1. 14:24

 

상속관계 복습

부모 또는 틀, 기반

 

 

-> Override 메소드라고 부른다

 

 

 

생성자와 생성자 오버로드(Overload)

 

 

 

 

 

 

오버로드(Overload)

 

 

함수를 생성할 때,

인자가 달라질 경우 다른 함수로 인식이 돼서 위에 사진처럼 생성은 가능

 

다른 함수에 비해.. total은 과적된 상태 -> Overload 했다

 

인자가 많으면 많을수록 더 Overload 된 함수다

 

기존에 있는 함수여야만 Overload 할 수 있다 

 

 

 

 

 

 

 

 

-> 그렇다면 생성자도 가능할까? 가능하다

 

 

 

 

 

생성자 오버로드는 

 

초기화하는 기능은 똑같은데, 

 

위에꺼는 기본 생성자

아래꺼는 넘겨받은 값으로 초기화한다 -> Overload 생성자

 

 

 

 

 

 

 

위 사진은 부모클래스에서 현재 오버로드된 함수가 있기 때문에

/ super(괄호안에서 컨트롤 스페이스 했을 때..

둘 중 무엇으로 생성할지 골라라 하는 상황의 사진이다 

 

 

 

 

오른쪽 클래스에서 기본 생성자를 주석처리 해주었다. 현재 오버로드된 생성자만 남아있다

 

기본생성자가 없을 경우

컴파일러에서 기본생성자를 만들어주지 않기때문에

 

메인에서는 인자를 넘겨받는 방식으로 생성을 해야한다

 

-> new Exam()의 괄호안에 파라미터로 오버로드 생성자의 인자만큼 지정 -> ex) new Exam(10, 20, 30)

 

 

 

 

 

 

 

파생클래스에서도 

  빼먹으면 안되겠다

 

 

 

이건 생성자를 오버로드한 경우

 

 

 

 

 

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

 

 

 

 

 

 

 

is a방식은 조립이 필요없이 가져다 고쳐쓰면 되기 때문에 더 편리

 

 

 

 

윈도우에서 제공하는 기본 툴들이 다양하다

 

프레임워크들.. -> 모든 프로그램이 갖고 있는 공통 뼈대

 

is a로 고쳐서 사용하던지 / has a 로 그냥 써도 충분해~

 

 

 

 

 

기존의 Frame 함수를 is a상속해서 사용

 

 

 

 

새로 만든 MyFrame에다가 그림을 그리고 싶다 -> paint라는 함수 오버라이드 (다양한 기능들이있다)

 

 

 

그 중 선을 그리는 함수 사용

 

 

-> 기존의 frame 함수를 가져다가 내가 원하는 함수(paint)를 오버라이드 해서 사용

 

다른것들도 이런식으로 가져다 쓰면돼..

 

 

 

 

 

 

 

아래 사진의 Exam과 NewlecExam의 관계는?

 

 

NewlecExam이 Exam을 상속받았다 

 

부모 자식 관계 : b는 a를 상속받았다

 

재정의 한다 -> 고쳐쓴다 -> override 

 

 

 

 

 

 

이때, 아래 두 줄의 객체생성 말고도 그 아래 두 줄 중 한가지 경우에는 가능한데

 

부모자식 관계인 경우에는 위에꺼는 가능

 Exam < NewlecExam

NewlecExam이 Exam을 상속받았으므로 더 크다

 

앞의 것은 참조일 뿐 큰 그릇으로 보면 안됨..

 

 

 

 

-> 이렇게 참조형식이 부모형식으로도 가능하다

 

 

 

부모로 했을 때 달라지는 점은?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3이 나올거같은데..

 

 

 

 

직접 해보자

 

오버로드해서 준비해놈

 

 

 

오버로드라는 것은 기능은 같지만 값을 파라미터로 받는다는 것이다

 

코드가 중복되면 그 중복된 수만큼 (고치더라도)일을 해야하기 때문에 중복된걸 제거해주어야 겠다

 

 

 

 

 

 

 

 

this()생성자 호출되는 순간 , 아래 함수 호출돼서 그 값들이 초기화

 

 

 

 

 

 

 

 

 

인자를 value로 다 바꿔본 경우에

 

 

 

 

인자가 있고 객체 생성이므로 인자가 있는 생성자 찾아가서 수행

 

 

 

만약에 인자가 없이 exam객체 생성된 것이라면 ??

 

 오버로드 되지 않은 NewExam()이 호출되고 -> 그 안에 this(1)을 만나 생성자 중 인자가 하나 있는 것을 다시 호출

 

 

 

 

 

 

 

 

 

 

 

 

 

 

민주님 정리

 

 

 

 

 

 

근데 그래서 참조를 부모로 했을 때 달라지는 점은 뭐지? -> 내일