객체지향

  • 캡슐=개체 ->실체:객체
  • 객체들로 이루어진 프로그래밍
  • [A]->[B] : BA의 멤버 또는 부품으로 사용될 경우 : has a (상속)관계
  • [A]->[B] : BA의 부모 또는 틀,기반,기저,뼈대(프레임)으로 사용될 경우 : Is a (상속)관계
  • Is a 상속: (A extends B) 자식클래스에서 멤버를 추가하거나 기존에있는 부모의 함수를 수정
  • 부모의 멤버메소드를 수정하는 새로운 메소드를  오버라이드 메소드라고한다.
  • 오버라이드 : 자식우선권, 부모함수 덮어쓰기(자식이 부모랑 똑같은 함수를 가지고 있어서 부모것이가려진다)
  • 오버로드 : 기존메소드 + 동일한이름 + 파라미터 (즉, 이름동일한 메소드 공존가능)
  • 생성자? 객체초기화. 생성자간 호출 : this()

오버로드란 ?

과적된 상태, 기존함수에서 인자가 확장된것

기존애+동일한이름 +파라미터

인자가 추가되어 개별함수가 된다. total() 과 total(int ext)는 개별함수

함수구별하는 식별단위가 인자까지추가되었다(함수지향:함수이름으로만식별)

인자가 달라지면 다른함수로 인식된다.

오버로딩 후 Exam에서 생성자 두개를 선택할 수있다.

인자를 받는 생성자만 받도록 설정한 경우?

 

Frame클래스를 상속하고 오버라이딩

Frame을 오버라이딩하기위해 MyFrame으로 바꾸고 새로운클래스를 생성한다.

Frame을 상속한다

밖에서는 MyFrame의 기능처럼보인다.

원하는것으로  빠르게 만들어 쓸 수 있게된다.

Frame안에있는 paint함수를 오버라이드한것

 

Exam exam = new NewExam(); / 자식이 부모를 참조하다.

NewExam이 Exam, NewExam 둘다 가지고있어서 둘다 참조할 수 있다.

class A {

  int a ; //각 4바이트

  int b ;

}

class B extends A{

  int c;

}

B b = new B(); //총 12바이트가 만들어진다. 

자식부모를 가지고있어서 부모를 참조할 수 있다.

A b = new B();

오버로드가 계속 생기면 오버로드숫자만큼 코드가 중복된 것

코드중복이 발생→수정사항이 생기면 중복된 갯수만큼 고쳐야한다.→하나로 합치는 작업이 필요

둘중 하나는 없애고, 한쪽에서 다른 Exam()을 이용하도록한다.

위의 Exam()이 없어진다. 밑의 Exam()가 위의 Exam()일을 할 수 있다.

초기화 and 초기화

위에서는 호출만

밑에서는구현

오버로드는 코드중복->중복값갖고있는애들이 호출을 하게한다.

this(10,10,10)가  Exam(int a,..)을 호출한다.

초기화는 자식부터, 자식생성자 끝에서 부모생성자호출

Q. 어제수업 기본생성자를 자동으로 호출해서 super() 가 생략.

오늘은 디스를 써서 오버로드된 생성자호출.그럼 super()는 호출이 안됨 ?

 : 안된다.

super()는 this이후에 호출된다.

NewExam() → this(1) NewExam(int value) super(value) com=10;

객체생성은 부모것이만들어지고 자식객체가 만들어지지만, 초기화는 자식부터 초기화된다.

This(1)가 끝난이후에 super()가 호출된다

매개변수가 있는 super(value)를 명시해서 매개변수있는 부모생성자를 호출하도록했다.

super(value)를 쓰지않았다면 묵시적으로 super()가 호출된다. 

 

생성자는 최초로 한번만 호출되어야하는데, 내가 초기화하려는게 매개변수하나있는거니까 부모생성자도 super(value) 로 명시했다. 이걸적지않앗다면 컴파일러가 기본생성자로 초기화 했을것

+ Recent posts