首先看两个代码
建立一个worker类,类中声明了两个final修饰的方法,out1(),out()方法是private权限
class worker{
protected int a;
public void work() {
println("work");
}
private final void T() {
println("worker T");
}
private final void out() {
T();
println("worker out");
}
private final void out1() {
println("worker out1");
}
}
建立一个boss类,该类继承了worker类。
在这个类中成功声明了一个out()和out1()方法,均为public。
class boss extends worker{
public boss() {
println("hello boss ");
}
private final void T() {
println("boss T");
}
public final void out() {
T();
println("boss out");
}
public final void out1() {
println("boss out1");
}
}
写一个测试类
boss m=new boss();
m.out();
m.out1();
worker n=m;//向上转型,可以不管
//n.out();错误
//n.out1();错误
输出结果为
hello boss
boss T
boss out
boss out1
可以看到两个类中有完全一样的T()方法
private final void T() {
println("...T");
}
但当你把private改为其他的public等时便会报错,这是为什么呢?
因为如果某方法为private,他就只是隐藏在类中的程序代码,只不过是在两个类中有了相同的名称而已。如果是public,protected,包访问权限的话,就不会出现只是相同名称的情况。
所以上面的T方法并没有发生覆盖,只是一个新的方法。