Java의 Super 키워드와 instanceof 연산자 사용 방법

4121 단어 Java
Java Super 키워드
슈퍼 키워드는this와 유사합니다.this는 현재 클래스의 실례를 나타내고,super는 부류를 나타냅니다.
슈퍼는 하위 클래스에 사용할 수 있습니다. 점호(.)를 통해상위 클래스의 구성원 변수와 방법을 가져옵니다.슈퍼도 하위 클래스의 하위 클래스에 사용할 수 있으며 자바는 자동으로 상위 클래스로 거슬러 올라갈 수 있다.
부류 행위가 호출되면 이 행위가 본 종류의 행위와 같고 호출 행위는 부류에서 발생할 필요가 없으며 자동으로 상부류로 거슬러 올라갈 수 있다.
Super 키워드 기능:
상위 클래스에서private로 선언된 변수를 호출합니다.
덮어쓴 방법을 누르십시오.
방법명으로 부류 구조 방법을 표시하다.
숨겨진 변수와 덮어쓰는 방법 호출

public class Demo{
  public static void main(String[] args) {
    Dog obj = new Dog();
    obj.move();
  }
}
class Animal{
  private String desc = "Animals are human's good friends";
  //   getter  
  public String getDesc() { return desc; }
  public void move(){
    System.out.println("Animals can move");
  }
}
class Dog extends Animal{
  public void move(){
    super.move(); //  
    System.out.println("Dogs can walk and run");
    //   getter  
    System.out.println("Please remember: " + super.getDesc());
  }
}
실행 결과:

Animals can move
Dogs can walk and run
Please remember: Animals are human's good friends
move() 방법도 일부 조상류에 정의할 수 있다. 예를 들어 부류의 부류, 자바는 트레이스성을 가지고 이 방법을 찾을 때까지 계속 위로 찾아간다.
슈퍼를 통해 부류의 숨겨진 변수를 호출하려면 부류에서 getter 방법을 설명해야 합니다. 프라이버시로 성명된 데이터 구성원이 부류에 보이지 않기 때문입니다.
부류의 구조 방법을 호출하다
대부분의 경우 기본 구조 방법을 사용하여 상위 객체를 초기화합니다.물론 슈퍼를 사용하여 부류를 호출하는 구조 방법을 표시할 수도 있다.

public class Demo{
  public static void main(String[] args) {
    Dog obj = new Dog(" ", 3);
    obj.say();
  }
}
class Animal{
  String name;
  public Animal(String name){
    this.name = name;
  }
}
class Dog extends Animal{
  int age;
  public Dog(String name, int age){
    super(name);
    this.age = age;
  }
  public void say(){
    System.out.println(" , " + name + ", " + age + " ");
  }
}
실행 결과:
나는 귀여운 강아지다. 내 이름은 꽃이다. 나는 세 살이다
주의: 슈퍼 () 이든this () 이든지, 반드시 구조 방법의 첫 줄에 두어야 한다.
주의해야 할 것은 다음과 같다.
구조 방법에서 다른 구조 방법을 호출하려면 호출 동작이 가장 시작 위치에 있어야 합니다.
구조 방법 이외의 어떤 방법에서도 구조 방법을 호출할 수 없다.
하나의 구조 방법 내에서는 하나의 구조 방법만 호출할 수 있다.
구조 방법을 작성하면,super () 도 호출하지 않았고this () 도 호출하지 않았으며, 컴파일러는 부모 구조 방법에 호출된 것을 자동으로 삽입할 뿐만 아니라, 매개 변수도 가지고 있지 않습니다.
마지막으로 슈퍼와this의 차이점을 주의하십시오. 슈퍼는 하나의 대상의 인용이 아닙니다. 슈퍼를 다른 대상 변수에 값을 부여할 수 없습니다. 이것은 컴파일러가 부류 방법을 호출하는 특수한 키워드일 뿐입니다.
Java instanceof 연산자
다태성은 하나의 변수가 실제 인용하는 대상의 유형을 어떻게 판단하는가에 문제를 가져왔다.C++는runtime-type information(RTTI)을 사용하고, Java는instanceof 조작부호를 사용합니다.
instanceof 연산자는 변수가 인용하는 대상의 실제 유형을 판단하는 데 사용되며, 변수의 유형이 아니라 인용하는 대상의 유형임을 주의하십시오.다음 코드를 참조하십시오.

public final class Demo{
  public static void main(String[] args) {
    //   People  
    People obj = new People();
    if(obj instanceof Object){
      System.out.println(" ");
    }
    if(obj instanceof People){
      System.out.println(" ");
    }
    if(obj instanceof Teacher){
      System.out.println(" ");
    }
    if(obj instanceof President){
      System.out.println(" ");
    }
    System.out.println("-----------"); //  
    
    //   Teacher  
    obj = new Teacher();
    if(obj instanceof Object){
      System.out.println(" ");
    }
    if(obj instanceof People){
      System.out.println(" ");
    }
    if(obj instanceof Teacher){
      System.out.println(" ");
    }
    if(obj instanceof President){
      System.out.println(" ");
    }
  }
}
class People{ }
class Teacher extends People{ }
class President extends Teacher{ }
실행 결과:

 
 
-----------
 
 
 
변수가 현재 클래스나 하위 클래스의 실례를 인용한다면, instanceof는true를 되돌려주고, 그렇지 않으면false를 되돌려줍니다.

좋은 웹페이지 즐겨찾기