之前我们讲过继承的相关知识了,继承就是子类继承父类的属性和方法并且还可以覆盖父类的方法。但是这样有一个缺陷是什么呢,就是当我们一个类当中涉及一些封装的核心的东西或者对整个系统非常关键的方法或者类的时候,这个时候如果子类覆盖掉父类的方法将会对我们带来安全隐患。为了能够继承父类的方法,同时又能够保证我们类的安全性,这个时候我们就用到了final这个关键字。

final关键字之一:

  final从字面意思上来理解的话,就是最后的意思,也就是说这个方法一经定义之后,就是最后的,不能更改的。当我们用这个关键字修饰一个类的方法的时候,任何继承自这个类的子类,都不能够在自己的方法当中来覆盖他父类的这个方法。代码示例:

  

  1. class Animal
  2. {
  3.  
  4. final void die()
  5. {
  6.  
  7. System.out.print("Every animal will die");
  8.  
  9. }
  10.  
  11. void eat()
  12. {
  13.  
  14. System.out.print("Every animal must eat something");
  15.  
  16. }
  17.  
  18. }
  19.  
  20. class Dog extends Animal
  21. {
  22.  
  23. void die()
  24. {
  25.  
  26. System.out.print("Is dog going to die???");
  27.  
  28. }
  29.  
  30. void eat()
  31. {
  32.  
  33. System.out.print("Dog eat grass and meat!!");
  34.  
  35. }
  36.  
  37. }

如果这个时候我们编译的时候,就会提示我们:

被final关键字修饰的方法在子类当中是不能够被覆盖的。

final用法二:

final除了可以修饰一个类当中的某个方法不能够被覆盖之外,还能够修饰一个类,使这个类不能够被继承:

代码示例:

  1. final class Animal
  2. {
  3.  
  4. void die()
  5. {
  6.  
  7. System.out.print("Every animal will die");
  8.  
  9. }
  10.  
  11. void eat()
  12. {
  13.  
  14. System.out.print("Every animal must eat something");
  15.  
  16. }
  17.  
  18. }
  19.  
  20. class Dog extends Animal
  21. {
  22.  
  23. void die()
  24. {
  25.  
  26. System.out.print("Is dog going to die???");
  27.  
  28. }
  29.  
  30. void eat()
  31. {
  32.  
  33. System.out.print("Dog eat grass and meat!!");
  34.  
  35. }
  36.  
  37. }

这个地方就会报错:

final用法三:

final还可以修饰一个变量,被final修饰之后,这个变量一经定义就不能够被修改了。那么这么做有什么意义呢?这样做的意义就是,有可能我们用某一个数字代表着一类含义,但是我们单纯的定义这个数字,并不能提供很好的阅读性,为了能够保证代码的阅读性,我们这里提供一个变量来描述这个数字,同时呢也不能让这个变量被改变,因为这个常量改变了,这个意义也就改变了,所以必须要用final关键字来修饰。

  1. class Animal
  2. {
  3.  
  4. final int a = 10;
  5. void die()
  6. {
  7.  
  8. System.out.print("Every animal will die");
  9.  
  10. }
  11.  
  12. void eat()
  13. {
  14.  
  15. System.out.print("Every animal must eat something");
  16.  
  17. }
  18.  
  19. }
  20.  
  21. class Dog extends Animal
  22. {
  23.  
  24. void die()
  25. {
  26.  
  27. System.out.print("Is dog going to die???");
  28.  
  29. }
  30.  
  31. void eat()
  32. {
  33.  
  34. System.out.print("Dog eat grass and meat!!");
  35.  
  36. }
  37.  
  38. }
  39.  
  40. class FinalDemo
  41. {
  42.  
  43. public static void main(String[] args) {
  44.  
  45. Dog d = new Dog();
  46. d.a = 100;//会报错
  47. System.out.print(d.a);
  48.  
  49. }
  50.  
  51. }

如果我们这样写之后,在后期为a赋值的话就会报错:

final关键字需要注意的细节:

1、final和private一起使用是没有意义的。

2、用final关键字修饰的成员变量,在初始化的时候,必须要赋值。

3、

final关键字的特点:

1、final是一个修饰符,能够修饰类,方法,变量。

2、final修饰的类不能够被其他类继承。

3、final修饰的变量,只能够被赋值一次。为什么要用final修饰变量?如果在一个程序当中,一个数据是固定的,直接用这个数据就可以了,但是这样阅读性较差。所以这里要给数据起个名称,并且加个final固定,使这个变量名称的值不能够改变。写法规范,用final修饰的常量最好用大写字母来标识,这样能更好的区分是常量还是变量,如果有多个单词,多个单词之间用下划线链接。

4、final修饰的成员方法不能够被覆盖。

5、内部类只能访问被final修饰的局部变量。

java学习面向对象之final关键字的更多相关文章

  1. 《JAVA学习笔记 (final关键字)》

    [14-9]面向对象-final关键字 /* 继承的弊端,打破封装性. 不让其他类继承该类,就不会有重写. 怎么能实现呢?通过Java中的一个关键子来实现,final(最终化). [final关键字] ...

  2. Java学习笔记之——final关键字

    最终的,最后的 可以修饰:变量.方法.类 (1) 修饰变量 不可改变,即常量,只能赋值一次,赋值之后不可改变 a. 修饰属性:private final int num; 要求属性要显式赋值 通常在属 ...

  3. [Java学习]面向对象-super关键字;final关键字

    super关键字 super代表的是当前子类对象中的父类型特征,可以看做是this的一部分.与this不同,不是引用,不存储对象内存地址. super可以用在什么位置 1 可以用在成员方法中.不能用在 ...

  4. 《java入门第一季》之面向对象(final关键字)

    /* final可以修饰类,方法,变量 特点: final(可以修饰类),该(类)(不能被继承).一旦修饰了一个类,这个类就不能被继承了! final以修饰方法,该方法可以被继承但是不能被重写.(覆盖 ...

  5. Java学习个人备忘录之关键字final

    final关键字final可以修饰类,方法,变量.final修饰的类不可以被继承final修饰的方法不可以被覆盖final修饰的变量是一个常量.只能被赋值一次.内部类只能访问被final修饰的局部变量 ...

  6. java学习面向对象之内部类

    什么是面向对象内部类呢?所谓的内部类,即从字面意义上来理解的话,就是把类放到类当中. 那么内部类都有什么特点呢? 1.内部类可以访问包裹他的类的成员. 2.如果包裹他的类想访问被其包裹的类的话就得实例 ...

  7. java学习--面向对象

    对象及类的概念 对象是java程序的核心,在java程序中“万事万物皆对象” 对象可以看成是属性和方法的封装体 类是用来创建同一类型的对象的模板,在一个类中定义了该类对象所应具有的属性和方法 J2SD ...

  8. 安卓开发(Java)中关于final关键字与线程安全性

    前言 学习新知识固然重要,但是时常往回看看,温故知新是很必要的.回顾一下线程安全性和final关键字. 正文 从Java 5开始,final keyword一个特殊用法是在并发库中一个非常重要且经常被 ...

  9. java学习面向对象之异常之一

    一.异常的概述: 什么是异常?在我们编写java程序的时候,会出现一些问题,比如内存溢出啊或者数组索引超出最大索引啊,这些编程当中出现的这些个问题就是异常.但是异常也分为可以处理的和不可以处理的.比如 ...

随机推荐

  1. linux下安装memcached过程

    前一次已经安装过memcached,没有做记录,太久没有操作了也没有记录有点生疏,做一下笔记,已背后用. 下载文件                            下载memcached服务端, ...

  2. homework做了些什么?

    第一步:get_new_guid_uid_pairs_{$ymd} 参数是时间和100上的文件. 那么100上的文件是从哪里来的呢? 我们进入到100机器上,打开root权限下的cron,看到如下内容 ...

  3. html通用导航条制作

    第一步:先创建一个盒子,定义类为 nav,width 1000,height 40px,防京东的导航,与浏览器顶部100px,margin-top:100px,看的更直观 第二步:使用无序列表放置,导 ...

  4. jmeter压测SSL加密网站

    1.生成秘钥文件 得到网站证书,用jdk自带的keytool生成秘钥文件,执行dos命令: keytool     -import -alias "aaa" -file " ...

  5. Play - js/css concatenation & minify

    1. Css We’ll use LESS CSS, all less sources are defined in the app/assets, and they will be compiled ...

  6. 自定义Operation

    1.要自定义一个Operation 首先要创建一个继承于NSOperation的类. 2.在创建好的类的.h文件声明自定义的方法:-(instancetype)initWithDownLoadMess ...

  7. web页面的优化

    众所周知,一个web页面通常会包括HTML(XHTML.XML).CSS.Javascript,而其中HTML(XHTML.XML)为结构化语言,用于构建页面结构和相关数据:CSS则负责页面的样式,即 ...

  8. 生产者与消费者(一)---wait与notify

    生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品.解决生产者/消费者问题的方法可分为两类: (1)采用某种机 ...

  9. VS2008/MFC —常用控件使用总结 转载

    在公司培训期间,经理给了我们没人10个界面草图,让我们在VS2008下使用MFC设计,因为在经理的帮助和自己的努力下,终于在三天时间内完成,现在就根据在这三天 时间里所用到的控件做出如下总结: 1.D ...

  10. 纯手工打造dropdownlist控件

    先上图吧,看看效果. JS代码: ; (function ($) { var DropdownList = function (oDataSouce, oControlsContainer, oLis ...