Looking for java Keywords? Try Ask4Keywords

Java Language Переопределение метода


пример

Переопределение метода - это способность подтипов переопределять (переопределять) поведение их супертипов.

В Java это переводит в подклассы, переопределяя методы, определенные в суперклассе. В Java все непримитивные переменные являются фактически references , которые схожи с указателями на местоположение фактического объекта в памяти. references имеют только один тип, который является типом, с которым они были объявлены. Однако они могут указывать на объект либо их объявленного типа, либо любого из его подтипов.

Когда метод вызывается по reference , вызывается соответствующий метод фактического объекта, на который указывают .

class SuperType {
    public void sayHello(){
        System.out.println("Hello from SuperType");
    }

    public void sayBye(){
        System.out.println("Bye from SuperType");
    }
}

class SubType extends SuperType {
    // override the superclass method
    public void sayHello(){
        System.out.println("Hello from SubType");
    }
}

class Test {
    public static void main(String... args){
        SuperType superType = new SuperType();
        superType.sayHello(); // -> Hello from SuperType

        // make the reference point to an object of the subclass
        superType = new SubType();
        // behaviour is governed by the object, not by the reference
        superType.sayHello(); // -> Hello from SubType

        // non-overridden method is simply inherited
        superType.sayBye(); // -> Bye from SuperType
    }
}

Правила, которые следует учитывать

Чтобы переопределить метод в подклассе, метод переопределения (т. Е. Один в подклассе) ДОЛЖЕН ИМЕТЬ :

  • то же имя
  • тот же тип возврата в случае примитивов (подкласс разрешен для классов, это также называется ковариантными типами возврата).
  • тот же тип и порядок параметров
  • он может вызывать только те исключения, которые объявлены в предложении throws метода суперкласса или исключениях, которые являются подклассами объявленных исключений. Он также может выбрать НЕ выбрасывать какие-либо исключения. Имена типов параметров не имеют значения. Например, void methodX (int i) аналогичен void methodX (int k)
  • Мы не можем переопределить конечные или статические методы. Единственное, что мы можем сделать, это изменить только тело метода.