Tout d'abord, le rubis.
ruby2.4
class Foo
private
def hoge
p :hoge_in_Foo
end
end
class Bar < Foo
def hoge #Il peut être remplacé sans erreur
p :hoge_in_Bar
end
end
b = Bar.new
b.hoge # Bar#hoge est appelé
Vous pouvez simplement le remplacer. Il n'y a pas d'avertissement. Je pense que cela causera des problèmes.
Pour Java:
Foo.java
class Foo
{
private void hoge(){ System.out.println( "hoge in Foo" ); }
}
Bar.java
class Bar extends Foo
{
@Override
public void hoge(){ //=>Erreur:La méthode ne remplace ni n'implémente la méthode de supertype
System.out.println( "hoge in Bar" );
}
public static void main( String[] args ){
(new Bar()).hoge();
}
}
Si vous le faites, une erreur se produira comme décrit dans le commentaire ci-dessus. préférable.
Le hoge de Foo n'est pas une méthode remplaçable en premier lieu, c'est donc naturel.
Donc, sans " @ Override
", il n'y aura ni erreur ni avertissement.
c++11
#include <iostream>
class Foo
{
private:
virtual void hoge(){ std::cout << "hoge in Foo\n"; }
};
class Bar: public Foo
{
public:
virtual void hoge() override { std::cout << "hoge in Bar\n"; }
};
int main()
{
Bar bar;
bar.hoge(); // okay
}
Peut être remplacé normalement. Bien sûr, il peut être remplacé car la hoge de Foo est virtuelle. Cependant, il n'est pas surprenant que l'avertissement n'apparaisse pas même si la visibilité passe de privé à public. En premier lieu, il est normal de donner un avertissement lorsqu'il est privé et virtuel.