public class Animal { String breed; public void eat() {} public void sleep() {} } class Dog extends Animal{ String breed; public void eat() { System.out.println("狗正在啃骨头..."); } public void sleep() { System.out.println("狗正在睡午觉..."); } }
1、方法的重写(覆盖)原则
(1)方法名称、参数列表、返回值类型必须与父类相同。
(2)访问修饰符可与父类相同或是比父类更宽泛。
2、方法覆盖的执行:
子类覆盖父类方法后,调用时优先执行子类覆盖后的方法。
Dog dog = new Dog();
dog.eat();
执行结果:狗正在啃骨头...
3、当父子类定义了同名的属性,并不是覆盖了父类的属性,是属性遮蔽。
拓展:1、为什么子类要重写父类的方法?
(1)由于父类中定义的方法是所有子类的共性行为,子类对共性行为的表现形式不一,需要重写;如:狗在呲着牙啃骨头和猫在细嚼慢咽地吃鱼。
(2)父类提供的方法无法满足子类的需求。如:每个动物吃的食物不一。
2、既然父类提供的共性行为,无法满足子类的需求,为什么父类还要写子类共性行为的方法?
如父类不写子类共性行为的方法,代表着子类不具备这种能力。如:eat方法不写,代表所有子类不具备吃的能力。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)