今天看帖子,看有人这样写:
所有private方法默认是final的。
对此,我表示怀疑。private是表示方法可见性的,而final表示方法不能在子类中被覆写。
所以我觉得这两个关键字之间没什么关系。例子:
class person {
private void run() {
System.out.println("person running");
}
}class man extends person {
private void run() { //子类中仍然可以写run()方法,但如果person类的run方法是final就不行了
System.out.println("man running");
}
}大家说呢?
所有private方法默认是final的。
对此,我表示怀疑。private是表示方法可见性的,而final表示方法不能在子类中被覆写。
所以我觉得这两个关键字之间没什么关系。例子:
class person {
private void run() {
System.out.println("person running");
}
}class man extends person {
private void run() { //子类中仍然可以写run()方法,但如果person类的run方法是final就不行了
System.out.println("man running");
}
}大家说呢?
反正我觉得不对
class person {
private final void run() {
System.out.println("person running");
}
} class man extends person {
private void run() { //子类中仍然可以写run()方法,但如果person类的run方法是final就不行了
System.out.println("man running");
}
} private 和final一起加上就没有问题啦,我觉得private的方法是final的,但是final的不一定是private的。
final对类控制了可继承,对方法控制性覆盖性,对属性控制了引用性。
两者没联系,影响到是有的。
例如:
class A{
private final void setXX(){}
}
calss B{
public void setXX(){}
}
这样写是没错的,原因在于private 修饰了方法不可被继承,那么也就提不到覆盖了,所以final加上没意义了。
简单的说private影响了final的作用。本来可以限制子类不能覆盖的,这下子加上它子类虽然没覆盖,但是自己定义了该同名方法。
例如:
package com.edsx;
final class A{}package com.guas;
class B{
public B(){
com.edsx.A a;
}
}
本来可以看见A类的不能继承但是能用啊,这下子好了加了private 什么都看不见了。