总结:
1、什么时候要进行重写?
如果父类的方法已经无法满足当前子类的方法,需要将父类的方法重新写一边
2、子类如果重写父类中的方法之后,子类一定调用重写后的方法
3、发生方法覆盖的条件:
第一:发生在具有继承关系的两个类之间(重载是一个类中哦!)
第二:必须具有相同的方法名,相同的返回值类型、相同的参数列表
第三:重写的方法不能比被重写的方法拥有更低的访问权限。(可以更高)
第四:重写的方法不能比被重写的方法抛出更宽泛的异常。
第五、私有的方法不能被覆盖
第六:构造方法无法被覆盖(因为构造方法无法被继承)
第七:静态的方法不存在覆盖
第八:覆盖指的是成员方法,和成员变量无关
4、继承最基本的作用:代码重用
---- 继承最重要的作用:方法重写
简单举个栗子:
public class p{
public static void main(String [] args) {
Cat c = new Cat();
c.move();
}
}
class Animal{
public void move() {
System.out.println("move");
}
}
class Cat extends Animal{
// Cat 应该在 move中输出猫步
// 所以要在Animal类中的move方法中进行重定义,覆盖
public void move() {
System.out.println("kitty move");
}
// void move() {
// System.out.println("kitty move"); //Cannot reduce the visibility of the inherited method from Animal
// }
}
输出:kitty move
再举个栗子:
私有方法无法被覆盖
public class p{
private void m1() {
System.out.println("in p m1...");
}
public static void main(String [] args) {
p a = new B();
a.m1();
}
}
class B extends p{
public void m1() {
System.out.println("in B m1...");
}
}
输出:in p m1...
最后举个栗子:
** 静态方法不存在被覆盖**
public class p{
public static void m1() {
System.out.println("in p m1...");
}
public static void main(String [] args) {
p a = new B(); // 静态方法的执行与对象无关
a.m1();
}
}
class B extends p{
// 尝试重写父类的静态方法
public static void m1() {
System.out.println("in B m1...");
}
}
输出:in p m1...
网友评论