Java에서 객체에 대한 지식 요약

1. 대상과 유형의 개념
클래스: 같은 속성과 방법을 가진 사물에 대한 추상.
대상: 구체적인 어떤 사물은 자신의 일부 속성과 방법을 대표한다.
2. 클래스(대상) 간의 관계
관련(조합, 집합), 계승, 의존, 실현
3. 대상을 향한 디자인 사상
대상을 대상으로 어떤 종류를 고려합니까, 대상---클래스와 대상은 속성, 방법---클래스와 클래스 간의 관계가 있습니다
4. 재부팅, 재작성 및 숨기기
1). 재부팅(overload):
방법 재부팅은 여러 방법의 이름이 같지만 매개 변수 형식이나 매개 변수 개수가 다른 방법으로 되돌아오는 값 형식과 수식자와 무관하다

class Test {
 public int test(int a) {
  return a;
 }

 public String test(String a) {
  return a;
 }

 public float test(int a, String b) {
  return 0f;
 }

 public float test(String a, int b) {
  return 1.0f;
 }

 String test(float a) {
  return "";
 }

 String test(int a) {//  
  return "";
 }
}
앞의 다섯 개는 서로 다시 불러옵니다. 첫 번째와 여섯 번째는 반환 값 형식이 다르지만 파라미터가 같기 때문에 첫 번째와 여섯 번째 파라미터는 다시 불러오지 않습니다.
2). 다시 쓰기(override):
하위 클래스가 상위 클래스를 계승할 때 하위 클래스의 방법 이름, 매개 변수 유형, 매개 변수 개수는 상위 클래스와 완전히 같으면 하위 클래스가 상위 클래스의 방법을 다시 썼다고 간주한다.
메서드 다시 쓰기 규칙:
  • 매개 변수 목록과 원래 방법이 같다
  • 반환값 유형과 원래 방법이 같거나 상위 반환값 유형의 하위 유형
  • 원래 방법보다 더 엄격한 접근 등급을 제한할 수 없음(예를 들어 부류 방법은public이고 하위 클래스는protected,private)
  • 부류 방법이final로 정의되면 다시 쓸 수 없음
  • 부류 방법이 static으로 정의되었을 때 다시 쓸 수 없지만 같은 방법을 다시 쓸 수 있습니다(숨김 참조)
  • 새로운 이상을 던질 수 없거나 원래의 방법보다 광범위한 이상을 던질 수 없음(부류는 IOException을 던질 수 없고, 재작성 방법은 Exception을 던질 수 없고, IOException이나 IOException 하위 클래스만 던질 수 있음)
  • 3). 숨기기:
    숨기기는 상위 클래스의 구성원 변수와 정적 방법에 대한 것입니다.하위 클래스에서 상위 클래스와 같은 변수 이름이나 정적 방법(방법 이름이 같고 매개 변수 목록이 같고 반환 형식이 같다)을 설명하면 상위 구성원 변수와 정적 방법에 대한 숨김을 실현할 수 있습니다. 다음 예를 들어 이해하십시오.
    
    class A { 
     static int a = 1; 
     static int b = 2; 
     int c = 33;
    
     public static void printA() { 
      System.out.print(a); 
     } 
    
     public static void printB() { 
      System.out.print(b); 
     } 
    
    }
    
    class B extends A { 
     static int a = 3; 
     static int b = 4;
     int c = 44;
    
     public static void printB() { 
      System.out.print(b); 
     } 
    }
    
    public class Test { 
     public static void main(String[] args) { 
      B.printA();
      B.printB();
      System.out.print(B.a); 
    
      A a = new B();
      B b = new B();
    
      a.printB();
      b.printB();
      System.out.print(a.c);
      System.out.print(b.c);
     } 
    } 
    출력 결과:
    1 4 3 2 4 33 44
    하위 클래스에 같은 이름의 정적 방법이나 변수가 있으면 상위 클래스가 숨겨지고, 하위 클래스에 같은 이름의 정적 방법이나 변수가 있으면 상위 클래스에서 정적 방법이나 변수가 숨겨집니다. 이때 하위 클래스가 호출하는 것은 하위 클래스에서 자신의 정적 방법이나 변수입니다.하위 클래스에 같은 이름의 정적 방법이나 변수가 존재하지 않으면 상위 클래스의 정적 방법이나 변수를 호출합니다.부류가 호출하는 것은 시종 그 자체의 정적 방법과 변수이다.
    5. 포장:
    봉인은 대상의 속성과 조작을 하나의 독립된 전체로 결합시켜 대상 내부 조작의 실현을 숨기고 사용자는 대외적으로 제공한 방법을 통해 이 대상을 방문해야 하며 그 내부 실현의 세부 사항을 알 필요가 없다.
    장점:
  • 내부 구현 세부 사항을 숨기고 공공 접근 방식을 제공
  • 류 내부는 그 호출자에 영향을 주지 않고 자유롭게 수정할 수 있다
  • 결합 감소, 보안 향상
  • 6. 상속:
    계승은 대상이 다른 대상의 속성을 가져오는 과정입니다. 키워드는 extends와implements입니다.
    1). IS-A 관계식(한 객체가 다른 객체에 속함):
    방식 1.extends로 계승을 실현하기:
    
    public class Animal {
     public void eat() {
      System.out.println("Animal eating...");
     }
    }
    
    public class Mammal extends Animal {
     public void eat() {
      System.out.println("Mammal eating...");
     }
    }
    
    public class Dog extends Mammal {
     public void eat() {
      System.out.println("Dog eating...");
     }
    }
    방식 2.implements로 상속:
    
    public interface Animal {
     void eat();
    }
    
    public class Mammal extends Animal {
     public void eat() {
      System.out.println("Mammal eating...");
     }
    }
    
    public class Dog extends Mammal {
     public void eat() {
      System.out.println("Dog eating...");
     }
    }
    방식 1이든 방식 2든 우리는 instanceof 키워드로 검사할 수 있다. Mammal은 애니멀(포유동물도 동물)이다.개는 포유동물이자 동물이다.
    
    public class Test { 
      /**
      * instanceof 
      */
     public static void main(String[] args) {
      Mammal m = new Mammal();
      Dog d = new Dog();
      System.out.print(m instanceof Animal);
      System.out.print(d instanceof Mammal);
      System.out.print(d instanceof Animal);
     }
    }
    출력 결과:
    true true true
    2). HAS-A 관계식(한 객체에 다른 객체의 일부 속성이 있음):
    
    public class Car{}
    
    public class Speed{}
    
    public class Benz extends Car{
     private Speed sp; 
    }
    Benz는 Spend 속성을 포함하지만 Benz는 Spend가 아닙니다.
    7. 다태:
    다태적 실현의 세 가지 필수 조건: 계승, 재쓰기, 부류 인용은 자류 대상을 가리킨다.
    1). 상향 전환:
    우리는 하나의 Dog 대상을 실례화할 수 있다 Dog d = new Dog(); . 우리도 사용할 수 있다Animal d = new Dog();. 후자는 바로 위로 전환한다(부인용은 하위 대상을 가리킨다). 위의 두 가지 방식으로 만들어진 대상 d, 호출d.eat(); 출력의 결과는 모두 Dog eating이다.이것은 자바의 다태성을 나타낸다.위로 변환하여 만든 대상은 부류와 다른 방법과 변수를 잃어버립니다. (하위 클래스 특유의 방법과 변수를 호출할 수 없습니다.)
    2). 예제 설명:
    
    class A {
     public String show(D obj) {
      return ("A and D");
     }
    
     public String show(A obj) {
      return ("A and A");
     }
    }
    
    class B extends A {
     public String show(B obj) {
      return ("B and B");
     }
    
     public String show(A obj) {
      return ("B and A");
     }
    }
    
    class C extends B {}
    
    class D extends B {}
    
    class Test {
     public static void main(String[] args) {
      A a1 = new A();
      A a2 = new B();
      B b = new B();
      C c = new C();
      D d = new D();
      System.out.println(a1.show(b)); // ①
      System.out.println(a1.show(c)); // ②
      System.out.println(a1.show(d)); // ③
      System.out.println(a2.show(b)); // ④
      System.out.println(a2.show(c)); // ⑤
      System.out.println(a2.show(d)); // ⑥
      System.out.println(b.show(b)); // ⑦
      System.out.println(b.show(c)); // ⑧
      System.out.println(b.show(d)); // ⑨
     }
    }
    출력 결과:
    A and A   //  ①
    A and A   //  ②
    A and D   //  ③
    B and A   //  ④
    B and A   //  ⑤
    A and D   //  ⑥
    B and B   //  ⑦
    B and B   //  ⑧
    A and D   //  ⑨
    앞의 세 가지는 비교적 간단하고 틀리기 쉬우니 아래의 몇 가지를 봐라.
  • ④: a2는 A의 인용이 B의 대상을 가리키는데 위로 변형하여 만든 대상은 부류와 다른 방법과 변수를 잃어버리기 때문에 a2는 show(D obj), show(A obj) 두 가지 방법만 호출할 수 있기 때문에 a2.show(b) 방법을 호출해야 한다. B에서 이 방법을 다시 썼기 때문에 실행할 때 JVM은 B류에서 다시 쓰는 show(A obj) 방법을 호출해서 출력show(A obj)한다.
  • ⑤: 원리는 ④와 같다.
  • ⑥: B and A 방법을 호출해야 하는데 B에서 이 방법을 다시 쓰지 않아서 A류에서 이 방법을 호출했기 때문에 a2.show(d)로 출력한다.
  • ⑦⑧ ⑨: b는 B류의 대상으로 A류show(D obj), B류A and D, B류show(D obj) 방법을 호출할 수 있기 때문에 위와 같이 출력할 수 있다.
  • 총결산
    이상은 자바가 대상을 대상으로 하는 지식 포인트에 대한 정리의 전체 내용입니다. 본고의 내용은 여러분이 자바를 배우거나 사용하는 데 어느 정도 도움이 될 수 있기를 바랍니다. 의문이 있으면 댓글을 남겨 주십시오.

    좋은 웹페이지 즐겨찾기