java学习面向对象之final关键字
之前我们讲过继承的相关知识了,继承就是子类继承父类的属性和方法并且还可以覆盖父类的方法。但是这样有一个缺陷是什么呢,就是当我们一个类当中涉及一些封装的核心的东西或者对整个系统非常关键的方法或者类的时候,这个时候如果子类覆盖掉父类的方法将会对我们带来安全隐患。为了能够继承父类的方法,同时又能够保证我们类的安全性,这个时候我们就用到了final这个关键字。
final关键字之一:
final从字面意思上来理解的话,就是最后的意思,也就是说这个方法一经定义之后,就是最后的,不能更改的。当我们用这个关键字修饰一个类的方法的时候,任何继承自这个类的子类,都不能够在自己的方法当中来覆盖他父类的这个方法。代码示例:
class Animal
{ final void die()
{ System.out.print("Every animal will die"); } void eat()
{ System.out.print("Every animal must eat something"); } } class Dog extends Animal
{ void die()
{ System.out.print("Is dog going to die???"); } void eat()
{ System.out.print("Dog eat grass and meat!!"); } }
如果这个时候我们编译的时候,就会提示我们:

被final关键字修饰的方法在子类当中是不能够被覆盖的。
final用法二:
final除了可以修饰一个类当中的某个方法不能够被覆盖之外,还能够修饰一个类,使这个类不能够被继承:
代码示例:
final class Animal
{ void die()
{ System.out.print("Every animal will die"); } void eat()
{ System.out.print("Every animal must eat something"); } } class Dog extends Animal
{ void die()
{ System.out.print("Is dog going to die???"); } void eat()
{ System.out.print("Dog eat grass and meat!!"); } }
这个地方就会报错:

final用法三:
final还可以修饰一个变量,被final修饰之后,这个变量一经定义就不能够被修改了。那么这么做有什么意义呢?这样做的意义就是,有可能我们用某一个数字代表着一类含义,但是我们单纯的定义这个数字,并不能提供很好的阅读性,为了能够保证代码的阅读性,我们这里提供一个变量来描述这个数字,同时呢也不能让这个变量被改变,因为这个常量改变了,这个意义也就改变了,所以必须要用final关键字来修饰。
class Animal
{ final int a = 10;
void die()
{ System.out.print("Every animal will die"); } void eat()
{ System.out.print("Every animal must eat something"); } } class Dog extends Animal
{ void die()
{ System.out.print("Is dog going to die???"); } void eat()
{ System.out.print("Dog eat grass and meat!!"); } } class FinalDemo
{ public static void main(String[] args) { Dog d = new Dog();
d.a = 100;//会报错
System.out.print(d.a); } }
如果我们这样写之后,在后期为a赋值的话就会报错:

final关键字需要注意的细节:
1、final和private一起使用是没有意义的。
2、用final关键字修饰的成员变量,在初始化的时候,必须要赋值。
3、
final关键字的特点:
1、final是一个修饰符,能够修饰类,方法,变量。
2、final修饰的类不能够被其他类继承。
3、final修饰的变量,只能够被赋值一次。为什么要用final修饰变量?如果在一个程序当中,一个数据是固定的,直接用这个数据就可以了,但是这样阅读性较差。所以这里要给数据起个名称,并且加个final固定,使这个变量名称的值不能够改变。写法规范,用final修饰的常量最好用大写字母来标识,这样能更好的区分是常量还是变量,如果有多个单词,多个单词之间用下划线链接。
4、final修饰的成员方法不能够被覆盖。
5、内部类只能访问被final修饰的局部变量。
java学习面向对象之final关键字的更多相关文章
- 《JAVA学习笔记 (final关键字)》
[14-9]面向对象-final关键字 /* 继承的弊端,打破封装性. 不让其他类继承该类,就不会有重写. 怎么能实现呢?通过Java中的一个关键子来实现,final(最终化). [final关键字] ...
- Java学习笔记之——final关键字
最终的,最后的 可以修饰:变量.方法.类 (1) 修饰变量 不可改变,即常量,只能赋值一次,赋值之后不可改变 a. 修饰属性:private final int num; 要求属性要显式赋值 通常在属 ...
- [Java学习]面向对象-super关键字;final关键字
super关键字 super代表的是当前子类对象中的父类型特征,可以看做是this的一部分.与this不同,不是引用,不存储对象内存地址. super可以用在什么位置 1 可以用在成员方法中.不能用在 ...
- 《java入门第一季》之面向对象(final关键字)
/* final可以修饰类,方法,变量 特点: final(可以修饰类),该(类)(不能被继承).一旦修饰了一个类,这个类就不能被继承了! final以修饰方法,该方法可以被继承但是不能被重写.(覆盖 ...
- Java学习个人备忘录之关键字final
final关键字final可以修饰类,方法,变量.final修饰的类不可以被继承final修饰的方法不可以被覆盖final修饰的变量是一个常量.只能被赋值一次.内部类只能访问被final修饰的局部变量 ...
- java学习面向对象之内部类
什么是面向对象内部类呢?所谓的内部类,即从字面意义上来理解的话,就是把类放到类当中. 那么内部类都有什么特点呢? 1.内部类可以访问包裹他的类的成员. 2.如果包裹他的类想访问被其包裹的类的话就得实例 ...
- java学习--面向对象
对象及类的概念 对象是java程序的核心,在java程序中“万事万物皆对象” 对象可以看成是属性和方法的封装体 类是用来创建同一类型的对象的模板,在一个类中定义了该类对象所应具有的属性和方法 J2SD ...
- 安卓开发(Java)中关于final关键字与线程安全性
前言 学习新知识固然重要,但是时常往回看看,温故知新是很必要的.回顾一下线程安全性和final关键字. 正文 从Java 5开始,final keyword一个特殊用法是在并发库中一个非常重要且经常被 ...
- java学习面向对象之异常之一
一.异常的概述: 什么是异常?在我们编写java程序的时候,会出现一些问题,比如内存溢出啊或者数组索引超出最大索引啊,这些编程当中出现的这些个问题就是异常.但是异常也分为可以处理的和不可以处理的.比如 ...
随机推荐
- CocoaPods 原理分享及遇到的问题改进
cocoapods 原理分享及问题阐述 cocoapods 管理私有工程,需要两个git 仓库, repo 仓库,保存podspec 文件,告诉我们项目从哪来, 项目 仓库,保存工程文件,告诉我们引用 ...
- CentOS 6.7安装配置Cacti监控系统
一.安装配置LAMP环境 yum -y install httpd php php-mysql php-snmp php-xml php-gd mysql mysql-server 启动http和my ...
- Hibernate占位符警告:use named parameters or JPA-style positional parameters instead.
Hibernate占位符警告:use named parameters or JPA-style positional parameters instead. >>>>> ...
- 31、三层架构、AJAX+FormsAuthentication实现登陆
三层架构 前段时间公司要求修改一个网站,打开后我疯了,一层没有都是调用的DB接口,遍地的SQL语句,非常杂乱. 什么是三层架构? 三层架构是将整个项目划分为三个层次:表现层.业务逻辑层.数据访问层.目 ...
- [分词] C#SegList分词辅助类,帮助类 (转载)
点击下载 SegList.rar 主要功能如下最新的SegList分词辅助类,帮助类看下面代码吧 /// <summary> /// 类说明:SegList /// 编 码 人:苏飞 // ...
- CSS-BFC
最近看幕课网CSS之Float,float最初是为了实现文字的环绕效果:这里面提到BFC,刚好项目中正用到一种解决BFC的方法,DIV在添加float后,就不存在文档流中啦,不占据空间,这使的一些未浮 ...
- Maven3(笔记二)
笔记本二 在Eclipse 中使用Maven 第一节:m2eclipse 插件安装 打开Eclipse,点击菜单Help - > Install New Software 点击Add 按钮N ...
- iphone"此证书是由未知颁发机构签名的"的解决办法
由于误删除,将开发证书给弄没了,导致Certificates中更新的证书都提示此证书是由未知颁发机构签名的,不能实机调试,解决办法是重新下载AppleWWDRCA.cer 地址是:http://dev ...
- __init__ __new__区别
请运行代码: class A: def __init__(self): print "A.__init" def __new__(self): print "A.__ne ...
- Android学习3—电话拨号器
本测试主要实现了一个Android的拨打电话的功能 一:界面预览 由图中可以看出,这个Activity需要3个控件:TextView.EditText.Button 其实实现一个功能要经过几个步骤: ...