我曾在评论中説过所有的private方法都隐式的指定为final
今天看到一个朋友这样写,以下是那位朋友的观点:今天看帖子,看有人这样写:
所有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");
}
} 大家说呢? 以下我想解释下
我想那位朋友把我那句话理解错了,他説的基类中final方法名run()在子类中不能被用是正确的
当是我那句话的前提这个方法是private的
代码解释如下:
class Person{
private void f(){}
private final void g(){}
}
class Man extends Person
private void f(){}
private final void g(){}
}
以上的写法是正确的,f()方法和g()方法其实没区别,所以説private方法添加final关键字没任何区别.
今天看到一个朋友这样写,以下是那位朋友的观点:今天看帖子,看有人这样写:
所有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");
}
} 大家说呢? 以下我想解释下
我想那位朋友把我那句话理解错了,他説的基类中final方法名run()在子类中不能被用是正确的
当是我那句话的前提这个方法是private的
代码解释如下:
class Person{
private void f(){}
private final void g(){}
}
class Man extends Person
private void f(){}
private final void g(){}
}
以上的写法是正确的,f()方法和g()方法其实没区别,所以説private方法添加final关键字没任何区别.
但final方法就不可以在子类中重写.这两个虽然有些行为表现起来碰巧相似,但本质上没有
任何关系.那个人表达的意思是,如果private隐含final,那么在子类中就不能被重写.因为final方法
不能被子类重写.但private方法可以在子类中重写,说明private不隐含final.他写了final boid g()只是为了明说final方法子类不能重写.用来和private比较.为什么要加
private?"他説的基类中final方法名run()在子类中不能被用是正确的 ",final方法在子类中不能调用是正确的?什么思维?
我觉得从这些问题反映出你的水平还不足以讨论这些问题,自己先好好看书吧.
前提是private
而那位反驳朋友説:所有private方法默认是final的,对此,我表示怀疑
你不会就是那位反驳的吧,何况楼主也没説那位朋友坏话,你就乱骂人
private void doIt() {
System.out.println("Super.do();");
} public void execute() {
doIt();
}
}class Sub extends Super {
private void doIt() {
System.out.println("Sub.do();");
}
}public class Test { public static void main(String[] args) {
Sub instance = new Sub();
//输出Super.do();表示Sub的doIt()方法根本没有覆盖Super的doIt()方法
instance.execute();
}
}