Java - Overriding重写
本文参考这里
区别:
- overload:重载,名相同/参数不同(类型/数目),即函数签名不相同。重载发生在同一个类内的两个或多个方法间,平行的关系。
- override:重写、也译覆盖,函数签名相同。重写发生在父与子类之间,层次的关系。
子类从父类中继承到一个非final
方法,则可以在子类中对该方法进行重写(overriding)。
例子1:
class Animal
{
public void move()
{
System.out.println("Animals-move");
}
}
class Dog extends Animal
{
public void move() // 重写overriding
{
System.out.println("Dogs-move");
}
}
Animal a = new Animal(); // Animal reference and object
Animal b = new Dog(); // Animal reference but Dog object
a.move(); // runs the method in Animal class
b.move(); // Runs the method in Dog class
// 运行结果:
Animals-move
Dogs-move
例子2:
// MainTest.java
class Animal
{
void say()
{
System.out.println("animal say");
}
}
class Dog extends Animal
{
@Override
void say()
{
System.out.println("dog say");
}
}
class Cat extends Animal
{
@Override
void say()
{
System.out.println("cat say");
}
// for overload test
void move()
{
System.out.println("cat move");
}
void move(int i)
{
System.out.println("cat another move");
}
}
public class MainTest
{
public static void main(String[] args)
{
Animal a = new Animal();
Animal b = new Dog();
Cat c = new Cat();
// overriding, 多态
a.say();
b.say();
c.say();
// overload
c.move();
c.move(1);
}
}
// 运行结果:
animal say
dog say
cat say
cat move
cat another move
方法重写的规则(rules)
略
super
关键字
调用父类版本的方法 When invoking a superclass version of an overridden method the super
keyword is used.