定义是这样的1final类不能被继承,没有子类,final类中的方法默认是final的。
2.final方法不能被子类的方法覆盖,但可以被继承。 第一条我明白
第2条有疑问
final方法的话那他的类也是final的吧?那如果是final类的话不就不能被继承了么?那为什么第2条说可以继承但不能重写什么意思 能否举个例子
2.final方法不能被子类的方法覆盖,但可以被继承。 第一条我明白
第2条有疑问
final方法的话那他的类也是final的吧?那如果是final类的话不就不能被继承了么?那为什么第2条说可以继承但不能重写什么意思 能否举个例子
Sub.f();
}
}class Super {
public static final void f() {
System.out.println("static final method f().");
}
}class Sub extends Super {
//public static void f() {}不能覆盖
}
package mypack;public class A { public static void main(String[] args) {
C a = new C();
a.say();
}
}
class B{//B有final方法,但不是final类 public final void say() {
System.out.println("您好");
}}
//final类的方法是final方法,但有final方法的类不一定是final类,所以是可以继承的,但不能修改final方法
class C extends B {
}
所以就不存在类不能被继承的问题了
而它的子类肯定继承了父类的所有方法
但继承归继承
由于它是final方法
所以这个方法不能被重写
其他的方法依旧可以重写
以后对多态熟悉了
就会明白为什么这样做了
public class TestFinalMoethod { public static void main(String[] args) {
Sub.f();
}
}class Super {
public static final void f() {
System.out.println("static final method f().");
}
}class Sub extends Super {
//public static void f() {}不能覆盖,但是你Sub类的实例可以调用Super类的f()方法。
//所以final方法不能被子类的方法覆盖,但可以被继承。
}
楼主错在认为有final方法的类就是final类