首页
JAVA笔记
数据库笔记
混乱记忆
小站记
您现在的位置
java 重写和覆盖不看是你的损失
简介: 常常在继承时被重写弄得头大,想要重写,结果却是覆盖。在这里给java开放者解惑。
java 是面向对象的程序语言支持继承多态。多重继承到底好好不好用暂且不说。不过最近发现一个毛病,当然可能是当时学习的时候没有注意,写了几个 demo 之后进行了总结。

重写和覆盖的区别

 
java 继承时父类中的字段在继承时可以做什么?
答:父亲类中的字段只能被覆盖。

java 继承时父类中的函数在继承时可以做什么?
答:被 public 修饰的函数可以直接被重写。
答:被 protected 修饰的函数可以直接被重写。
答:被 private 修饰的函数只能覆盖
答:被 static 修饰的函数只能覆盖

怎么确定一个函数是否可被子类重写?
答:在子类中能够被直接调用的父类函数就可以被重写。

怎么验证自己的代码是重写还是覆盖?
答:理论上在子类中可直接被调用的父类函数都可以被重写。
或者通过代码测试--将子类转换成父类,然后执行重写的函数进行测试,如果执行的是子类函数那么就是重写,如果执行的是父类函数那么就是覆盖。

示例:

public class A{

    public say(){
    System.out.println("---- A -----");
    }
}

public class A extends B{
public say(){
    System.out.println("---- B -----");
    }
}

public class C {
public static void main(String[] args){
B b = new B();
A a = b;
a.say();
}
}

继承时存在字段覆盖,怎么确定被调用函数访问的是子类字段还是父类字段?
答:首先抛开继承规则不管,如果调用函数的代码在子类定义,那么访问的就是子类的字段。如果父类中定义,那么访问的就是父类的字段。


提醒:正常情况下覆盖只会增加程序复杂度、很容易扰乱开放人员查看代码的思维,一般不提倡使用。但是函数的重写加上字段的覆盖组合确实能够使我们在代码扩展上产生出奇的效果。

最近更新