学习:final的实际用途

简介: 先列出一个类: package usage._of._final; public class ClassWithOutFinal { public void method1(int i) { System.out.println(2 * method2(i)); } public int method2(int i) { return i; } }   该类有两个方法,method1调用到了method2,该类并没有被final修饰,也没有文档说明method1的结果是被method2影响的。

先列出一个类:

package usage._of._final;

public class ClassWithOutFinal {
    public void method1(int i) {
        System.out.println(2 * method2(i));
    }

    public int method2(int i) {
        return i;
    }
}

 

该类有两个方法,method1调用到了method2,该类并没有被final修饰,也没有文档说明method1的结果是被method2影响的。再来看的效果:

package usage._of._final;

public class ClassInheritUnfinalClass extends ClassWithOutFinal {
  @Override
public int method2(int i) { return i * 2; } public static void main(String[] args) { new ClassInheritUnfinalClass().method1(2); } }

这个类是继承自之前的那个类的,我们只重写了method2这个方法。

然后我们来看看method1的效果。


实例化并调用method1,new
ClassInheritUnfinalClass().method1(2);

期望的结果应该是4,但是实际的结果是8.

当然,你可以认为在编程中是不会出现这种“愚蠢”的问题的,但是在项目组开发的过程中,这种由于继承导致的错误结果是几乎无法察觉且破坏性严重的。

尤其是,继承并非自己设计的类的时候,或者父类由另外的单位维护更新的时候,你的子类会无比的脆弱。

所以,不需要被继承的类,最好使用final修饰符。不需要重写的方法,最好使用final修饰符。

如果一个类被设计为需要继承的,需要写完整文档。

 

 

 

目录
相关文章
|
5月前
|
C++
【C++11特性篇】C++11中の【override】【final】关键字——帮助用户检测是否重写
【C++11特性篇】C++11中の【override】【final】关键字——帮助用户检测是否重写
|
4月前
|
C语言
【C 语言经典100例】C 练习实例41 - static
【C 语言经典100例】C 练习实例41 - static
23 0
|
8月前
|
Java
final 类,常量,方法的解释
final 类,常量,方法的解释
57 1
|
8月前
|
编译器 C++
C++11新特性探究:显式override和final
C++中,我们一般可以以基类声明纯虚函数,然后让派生类继承并重写这个虚函数,用override表示显示覆盖基类方法,但一直没有提供一种方法来阻止派生类继承基类的虚函数。
|
Java
Java中的static的作用与用法【详细解释+大量实例】
static关键字主要有两种作用: 第一,为某特定数据类型或对象分配唯一的存储空间,而与创建对象的个数无关。 第二,实现某个方法或属性与类关联在一起而不是对象关联在一起,因此不需要实例化对象,只需要用类名就可以调用静态的属性或方法。 在Java语言中,static主要有4中使用情况:成员变量、成员方法、代码块和内部类
201 0
小浩编程:static简单举例应用
小浩编程:static简单举例应用
53 0
|
存储 Java 程序员
深入理解Java中的三个修饰符(抽象(abstract)、静态(static)和最终的,不可变(final))【配视频】
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
283 0
深入理解Java中的三个修饰符(抽象(abstract)、静态(static)和最终的,不可变(final))【配视频】
|
存储 Java
Java基础:static的理解(含义、用法及静态修饰的优先顺序)
Java基础:static的理解(含义、用法及静态修饰的优先顺序)
149 0
Java基础:static的理解(含义、用法及静态修饰的优先顺序)
|
缓存 Java
JDK源码(10)-Integer(用处最多,重点讲解)
JDK源码(10)-Integer(用处最多,重点讲解)
JDK源码(10)-Integer(用处最多,重点讲解)