국비지원학원/Java

31일차

초코맛 2018. 12. 3. 01:12
반응형
*상속
*오버라이드
*슈퍼



*상속(inheritance)
  • OOP특징중 하나(캡슐화-접근제어(접근지정자), 다형성-메소드다형성(오버로딩),객체다형성)
  • 상속을 하는 이유: 코드의 재사용성 향상.
  • 상속받은 자식클래스는 부모의 자원을 모두 사용가능하다.(private 제외)
  • 자바는 단일상속만 가능해 부모를 뚜렷하게 알수있다. 단, 다양한 기능의 사용이 어렵다.
  • 부모(슈퍼)클래스는 모든 자식이 사용할 공통특징을 정의
  • 자식은 자식만의 기능을 정의

+Person
-int eye, nose,mouth
-String name
+Person()
+Person(int, int, int)   <생성자의 오버로딩
+setter
+getter
+eat() :String
+eat(String, int ) : String
              ↑

+HongGilDong
-int level
+HongGilDong()
+fight(int) : Sgring
                 ↑
+final Clack
+int power
+Clark()
+power(String) : String

+UsePerson

+static main(String[]) : void
홍길동의 생성자가 부모없이는 생성될수 없어 부모클래스의 생성자를 부른다. 그리고 부모는 Object클래스를 부른다.
오브젝은 인스턴스 변수가 하나도 존재하지 않는다..(그래서 클래스의 크기로 선정되지 않는다?)
Object클래스찍고 다시 자신클래스 부르러 옴.
HongGilDong gd=new(heap) HongGilDong();

//홍길동클래스 안에 있음
public void test(){
    this(인스턴스주소, heap의 주소).level    =>o
    this.eye(부모클래스의 자원)     =>o
}

//시대가 다르고 나라가 다른데 공통특징이  어떻게 밥...일수 있겠냐..
주막에서 국밥 1냥  
제육볶음 7000원
레스토랑에서 스테이크10불
======>오버라이드 "오버라이딩" =>다형성


*다형성(Polymerplism)
  • <오버라이드는 annotation까지 함께본다.
  • method 다형성, 객체 다형성 두가지가 존재.
  • method 다형성  
    • Overload(overloading) : 하나의 클래스에서 같은이름의 메소드를 여러개 만들수 있는 방법(편의성_이름고민을 덜어준다.)
    •                                        같은이름의 메소드도 다른 결과.
    •                             규칙 : 접근지정자, 반환형, method명 같고, 매개변수를 다르게 만드는것.
    • Override(Overriding) : 상속관계의 클래스에서 부모클래스가 제공하는 기능이 자식한테 맞지 않을때 그, method를 재정의하여
    •                                      (나한테 맞게 바꾸어) 사용하는것. =>최우선적으로 라는 뜻을 가짐.
    •                                      Override된 method 를 최우선적으로 호출된다.
    •                             규칙 : 접근지정자, 반환형, method명, 매개변수까지 같고 하는일을 다르게 주어야한다.
    •                                      =>접근지정자는 사실 달라도 된다.(접근이 원활한쪽,광의의 접근지정자로)
    • 부모의 method의 접근지정자가 default 일 경우 자식은 default, protected, public
    • 부모의 method의 접근지정자가 protected일 경우 자식은 protected, public
    • 부모의 method의 접근지정자가 public일 경우 자식은 public
    • 규칙을 지키지 않으면 Error
    • JDK1.5에서는 Compile time 에 Override를 체크할 수 있는 annotation 제공.
    • Override의 대표적인 예가 toString
-객체를 출력하면
  • 그객체의 heap의 주소가 나온다.(this)
  • 객체를 출력하면 주소가 출력. 왜 주소가 출력 되냐하면,
  • Test t = new Test();
  • system.out.println(t);
  • String s =new String("안녕");
  • system.out.Println(s); =>문자열!! 왜 얘는 주소가 아니라 문자열?!
  • 주소가 출력되는 이유는? Object에서 제공하는 toString()이라고 하는 method를 호출하여 반환되는 값을 출력했기(찍었기) 때문이다.
  • 객체가 불려지면 object의 toString의 메소드가 불려 객체의 주소를 출력,
  • String 은 왜일까? : 오버라이딩 되어서 문자열은 문자열로 보여주는것.
  • (부모가 제공하는 주소의 출력기능)주소가 나오기 싫으면 이 싫으면 오버라이딩~!~!~!!!
class Object{
    public String toString() {
    
    
    return 주소;
    }
}

class Test(){
    public String toString(){//대소문자를 가려 규칙에 맞게 사용해야 한다...!
    return "내가가진값" ;
}
    
*annotation
  • JDK1.5에서부터 제공하는 문법
  • Compiler에게 Compile시 명령을 부여할 때 사용.(수정한게 반영되지 않는다?)
  • 문법) @ annotation 명 //때에따라 클래스위 메소드위 변수위에 달기도 한다.
    • class위, method위, 변수위에 설정
    • 되게 많이 쓴다.(프레임워크를 더 손쉽게 잘쓰기위해서)
    • @Override  =>오버라이딩을 잘했는지 컴파일에게 체크하라고 시키는것.
      • method위에 선언
      • method가 overrride를 제대로 했는지 체크.
    • @Depercated
      • method위에 선언
      • 비추천 메소드로 변환 할때,
      • <줄이 그어져있으면 실행 될수도 안될수도 있으니 알아서 결정
    • @SuppressWarnings
      • method위, 클래스 위, 변수 위에 선언
      • <워닝(숨킬때)사용하는데, 권장ㄴㄴ
      • 경고를 무시

 

*슈퍼(Super)
  • <this랑 비슷(인스턴스 주소와 메소드주소..?)
  • <생성자 호출관계====>2명....
  • method 형식과 keyword형식 2가지로 사용가능하다.
  • method 형식
    • 모든 생성자에는 super가 다 숨어있고, (없으면 Object이 불리지않는다.)생성자를 호출한다.
  • keyword 형식
    • 부모클래스의 변수, mehtod를 지정하여 사용할 때.
-keyword 형식
  • 부모클래스의 자원(변수, method) 이 자식클래스와 같은 이름을 가질때 부모클래스의 자원을 사용하기 위한 예약어
  • <리소스는 어디에 붙였느냐에 따라 대상이 달라진다.
  • <this는 주소로 출력되는데, super는 Error가 난다.
  • super는 생성된 객체의 부모객체주소
  • 출력하면 Error//toString();//Error, 부모의 toString 라고 콕찝어 이야기하지않으면 재귀호출되어 계속 나를 부르기 때문에 Error난다. 콬찝어 super.toString()라고 해야 부모의 주소가 나온다.
  • 클래스의 인스턴스영역에서만 사용할수 있다. (static은 객체가 생성될지 안될지 모르기때문에)
  • <<이름이 같지않다면 이렇게 접근할 필요가 없긴하다.
  • 사용법)
super.변수명
super.method명() <같았을때.
-method 형식
  • <생성자 호출할때 사용    <생성자 :객체가 생성될때 기본적으로 가지고있어야 할 값, 또는 실행되어야할 코드
  • 부모클래스의 생성자를 호출할 때 사용
  • 생성자의 첫번째 줄에서만 사용가능.
  • 모든 생성자의 첫번째 줄에 숨어있다. (부모클래스의 기본생성자를 호출하는 super가)        <object에만 생성자가 없고 다~~~있다.
  • 문법)
super(); //기본생성자 호출
super(값,,,); //인자있는 생성자 호출

 

반응형

'국비지원학원 > Java' 카테고리의 다른 글

33일차  (0) 2018.12.06
32일차  (0) 2018.12.06
30일차  (0) 2018.12.03
29일차  (0) 2018.11.30
28일차  (0) 2018.11.28