>

이것은 내가 가진 코드의 일부입니다. Rabbit 클래스와 Fox 클래스는 모두 수퍼 클래스의 하위 클래스이며 각각 int를 반환하는 getCounter () 메서드가 있습니다. getCounter ()가 유효한 메소드가 아니라는 오류가 발생합니다. 현재 클래스에는 존재하지 않지만 코드가 실행되면 getCounter에 액세스 할 수 있음을 알고 있습니다. (getCounter도 정적입니다.)

public static String setGender(Object obj){
    int specificCounter;
    Class s = obj.getClass();
    if(s == Fox.class|| s == Rabbit.class){
        specificCounter = s.getCounter();


  • 답변 # 1

    Java와 같은 객체 지향 프로그래밍 언어에서 이러한 문제는 일반적으로 다형성을 사용하여 해결됩니다.

    예를 들어, 기본 클래스가 추상 메소드를 선언하고 각 서브 클래스에 별도의 구현을 제공하도록 할 수 있습니다.

    연결된 Java Tutorials에는이 작업을 수행하는 방법에 대한 예가 들어 있습니다.

  • 답변 # 2

    instanceof 를 사용할 수 있습니다.  수업 확인 ( if(obj instanceof Fox) ) ). 그러나 다른 하위 클래스가 많은 경우 다른 경우 많은 것으로 이어질 것입니다.

    그러나 중요한 것은 메리 톤이 언급 한대로 다형성을 사용한다는 것입니다. 귀하의 질문에서 제공된 코드가 Fox와 Rabbit의 슈퍼 클래스에 있다고 생각합니다 . Animal 라고 가정 해 봅시다. . 이제 개체를받을 필요는 없지만 동물을받을 수 있습니다. Animal 클래스에 getCounter() 메소드가있는 한  (보다 구체적인 구현을 위해 하위 클래스로 재정의 될 수도 있음) 이제 obj.getCounter() 를 호출 할 수 있습니다

    class Animal {
        public static String setGender(Animal obj){
            int specificCounter = obj.getCounter(); 
        }
    }
    
    

  • 답변 # 3

    다른 많은 사람들이 지적했듯이 여기에는 꽤 많은 문제가있는 것 같습니다.

    한 사람이 당신을 도울 충분한 정보가없는 것 같습니다. 대신 자바 작동 방식을 읽어보십시오.

    자바 클래스 https://docs.oracle.com/javase/tutorial/java/javaOO/index.html

    자바 상속-https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

    java Oracle Documentation&Tutorials-https : //docs.oracle.com/javase/tutorial/java/index.html

  • 답변 # 4

    다른 많은 사람들이 언급했듯이, 수퍼 클래스는 독자적입니다 하위 클래스를 완전히 알지 못합니다. 때때로 당신은 이런 이상한 일을하려고했지만 가능하다면 피해야합니다. 일반적인 디자인에는 다음과 같은 세 가지 일반적인 접근 방식이 있습니다.

    <올>

    "동물"을 인터페이스로 만들면 모든 논리는 인터페이스 클래스 구현하기

    동물 추상을 선언하고 setGender 추상, 풀링 만들기 하위 클래스에서 코드를 구현합니다.

    이 시나리오에 가장 적합한 방법 :에서 "setGender ()"메소드 재정의 서브 클래스 및 서브 클래스에 대한 특정 조작 수행 해당되는 경우 super.setGender ()를 호출 한 후.

    좋아요 :

    public class Fox extends Animal {
      private String speciesGender;
      @Override
      public void setGender(String gender) {
        super.setGender(gender);
        //add specific stuff for fox
        if(gender.equals("F")) {
          speciesGender = "Vixen";
        } else {
          speciesGender = "Tod"
        }
      }
    }
    
    

    spceciesGender에 대한 getter는 Animal에서 추상적이면서도 생성을 강요 할 수 있습니다. 여러 가지 방법으로 슬라이스 할 수 있습니다 ...

관련 자료

  • 이전 python - Chainer로 작성된 CNN 모델의 교육 코드
  • 다음 jQuery에서 Ajax 함수 페이지를로드 한 후 텍스트 상자에서 커서 깜박임을 얻는 방법은 무엇입니까?