при переопределении метода почему необходимо сначала записать его в суперклассе, даже если он не имеет смысла для суперкласса? - PullRequest
0 голосов
/ 19 июня 2020

при переопределении метода, почему необходимо записывать этот метод в суперклассе, даже если этот метод не используется в суперклассе, поэтому недостаточно переопределить эти методы в подклассах, где это имеет смысл. например, если существует суперкласс A с двумя подклассами B и C, и я хочу переопределить метод D, который имеет смысл только для подклассов B и C, но не для суперкласса A, так зачем нам напишите этот переопределенный метод D в A, почему мы не можем писать только в подклассах B и C, когда метод D не имеет смысла для суперкласса A.

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Если вам не нужна реализация в суперклассе, вы можете сделать метод и суперкласс абстрактными.

abstract public class A {
    public abstract void aMethod();
}


public class B extends A{
    @Override
    public void aMethod() {
    }
}


public class C extends A {
    @Override
    public void aMethod() {
    }
}
0 голосов
/ 19 июня 2020

Когда вы создаете суперкласс, который должен быть расширен (обычно абстрактным) много раз, ему не обязательно использовать некоторые из методов в нем, только подклассы, это проще всего показать с помощью пример:

public abstract class GameObject {
        public abstract void render(Graphics g);
}

это суперкласс, сейчас у него только один метод render. этот суперкласс может иметь множество подклассов.

public class GameObject1 extends GameObject {
     @Override
     public void render(Graphics g) {
        g.drawsomething();
     }
}

подклассы ^ ^ vv

public class GameObject2 extends GameObject {
     @Override
     public void render(Graphics g) {
        g.drawsomethingelse();
     }
}

было бы проще составить много списков для каждый отдельный тип подкласса или сделать что-то вроде этого:

List<GameObject> objects = new ArrayList<GameObject>();

public void renderEverything(Graphics g) {
      for(GameObject o : objects)
          o.render(g);
}

второй пример намного проще и быстрее, чем создание тонны списков для каждого типа подкласса

...