Java에 대한 리플레이를 알기 쉽게 썼어요.

9053 단어 Java

전제 조건


이 기사는'규격 변경 시 변경량을 줄일 수 있는 업로드 캐릭터(Java)'에 이어 썼다.이에 따라 일부 소스 코드(Cat 클래스, Dog 클래스, Life form 클래스) 등이 맨 아래'소스 코드'항목에 게재됐다.
본문은'배역을 낮추는 것이 무엇인가'부터 시작한다.

개발 환경


텍스트 편집기 Atom 사용(이하 atom-vertion 실행 결과)


Atom : 1.28.0
Electron: 2.0.3
Chrome : 61.0.3163.100
Node : 8.9.3

다음 명령은 "java-version" 실행 결과입니다~


java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

패딩


'규격 변경 시 변경량을 줄일 수 있는 업로드 캐릭터(Java)'에서는 업로드 캐릭터를 처리했지만 반대의 동작을 마비라고 한다.
하지만 그렇게 쉽게 정리할 수는 없다.
업로드는 안전한 형식 변환입니다.
하위 클래스는 하위 클래스를 계승하기 때문에 하위 클래스의 모든 필드와 함수를 가지고 있습니다.따라서 자녀반을 부모반에 대입하는 실례(업로드)라도 문제 없이 일하는 것은 당연하다.
하지만 억눌린 배우도 그럴 수 없다.
부류에는 자류만의 함수가 없다.분명히 자급 선언을 했는데 자급에 있어야 할 함수, 필드가 없으니 좀 이상하다.
실제로 배역을 해보면 컴파일러에게 이렇게 욕을 먹는다.

실패


Main.java
public class Main{
  public static void main(String[] args){

    //ダウンキャスト 
    Cat cat = new Life_form();       //サブクラス <ー スーパークラス
    cat.makeSound();
  }
}

실행 결과



캐릭터를 다운로드하면 컴파일러 씨가 유형이 적합하지 않다고 지적합니다.
그럼 이건 어때요?

실패


Main.java
// サブクラス <ー スーパークラス
public class Main{
  public static void main(String[] args){
    Life_form life_form = new Life_form();
    Cat cat = new Cat();

    //ダウンキャスト 
    cat = (Cat)life_form;       //サブクラス <ー スーパークラス
    cat.makeSound();
  }
}
위 프로그램처럼 억지로 배역을 맡기면 편역은 통과할 수 있다.하지만 이번 집행 과정에서 오류가 발생했다.
Exception in thread "main"java.lang.ClassCastException: Life_form cannot be cast to Cat
at Main.main(Main.java:31)
부적합형으로 지적되다.
그럼 어떡해요?
사실상 하향 분배는 상행 분배 역할과 마찬가지로 직접 사용되지 않는다.
다음 분배에서 슈퍼 클래스 실례의 실체는 반드시 하위 클래스가어야 한다.
부모반을 그냥 아이들반에 둘 수는 없다는 것이다.
아래와 같은 코드처럼 하위 클래스에서 슈퍼 클래스를 실례화한 다음에 이를 낮추면 된다.

성공 사례


Main.java
public class Main{
  public static void main(String[] args){

    //アップキャスト
    Life_form life_form = new Cat();      //スーパークラス <ー サブクラス

    //ダウンキャスト
    Cat cat = (Cat)life_form;        //サブクラス <ー スーパークラス
    cat.catPunch();
  }
}

실행 결과



이렇게 쓰면 제때에 실행할 수 있다.캐릭터를 잘 분배해야 한다는 점에 주의해야 한다.

리플레이 언제 해요?


계속 올리면 catPunch () 라고 할 수 없습니다


출연진과 출연진이 밀접하게 관련되어 있으니 조금만 복습해 봅시다.
함수 매개변수로 Class A 인스턴스를 사용하려고 하지만 Class B 인스턴스도 지정하려고 합니다.
이런 상황에서 사용된 것은 특약 출연자다.
Life CatFome에 업로드된 경우 Lifeform의 실체는cat클래스의 실례입니다.cat클래스에서makeSound () 함수를 다시 쓰기 때문입니다life_form.makeSound();의 실행 결과는 Cat 클래스의 makeSound()입니다.
그러나 Cat 클래스 고유의 함수인 catPunch()라고는 할 수 없습니다.솔리드는 Cat에서도 은연중에 Life폼으로 움직이는 거니까.
업로드한 상태에서catPunch()를 실행해보면 이렇게 지적됩니다.

life_form이 Cat에서 실례화되었음에도 불구하고'기호를 찾을 수 없다'는 지적을 받은 것은 라이프입니다.form은 기본적으로 부모급으로 움직이기 때문이다.

그럼, 캣펀치()는 어떻게 부르죠?


간단해.그를 물러나게 할 수 있다.
'성공 사례' 프로젝트의 코드와 실행 결과를 보면catPunch () 를 사용할 수 있습니다.
모든 실례에만 있는 함수를 사용하려면 다운로드가 사용됩니다.

총결산

  • 하행 분배 캐릭터는 업로드된 캐릭터에 사용됩니다.
  • 하위 클래스의 특정한 함수를 업로드할 때 사용합니다.
  • 소스 코드


    이 글에 사용된 분류의 상세한 내용.
    Life_form.java
    //親クラス 
    public class Life_form{
      public void makeSound(){
        System.out.println("???");
      }
    }
    
    Cat.java
    //子クラス
    public class Cat extends Life_form{
      @Override
      public void makeSound(){
        System.out.println("にゃあ");
      }
    
      public void catPunch(){
        System.out.println("ネコパン");
      }
    
    }
    
    Dog.java
    //「仕様変更よろしく」の項目で使用します。
    public class Dog extends Life_form {
      @Override
      public void makeSound(){
        System.out.println("クゥーン!");
      }
    
      public void dogAttack(){
        System.out.println("かみつく");
      }
    }
    
    

    좋은 웹페이지 즐겨찾기