scjp考试准备 - 8 - final关键字
题目,如下代码的执行结果:
import java.util.ArrayList;
class Pizza{
ArrayList toppings;
public final void addTopping(String topping){
toppings.add(topping);
}
public void removeTopping(String topping){
toppings.remove(topping);
}
}
class PepperoniPizza extends Pizza{
public void addTopping(String topping){
System.out.println("Cannot add Toppings");
}
public void removeTopping(String topping){
System.out.println("Cannot remove pepperoni");
}
}
public class Test{
public static void main(String[] args){
Pizza pizza = new PepperoniPizza();
pizza.addTopping("Mushrooms");
pizza.removeTopping("Pepperoni");
}
}
这道题考察的还是继承和重写相关的知识。不过这里涉及到了final关键字。
查了一下final关键字相关的知识点:
1. final修饰的成员变量必须显式指定初始值;
2. final修饰的类成员变量必须在声明变量时或静态初始化块中指定初始值;
3. final修饰的实例成员变量必须在声明变量时、或非静态初始化块或构造器中指定初始值;
4. final修饰的成员变量一旦被赋予初始值后就不可以被重新赋值;
5. final修饰的成员变量在被指定初始值前(被初始化前)不可以被访问;
6. 对于final修饰的局部变量。因为系统不会对局部变量进行初始化,局部变量必须被显式初始化。因此使用final修饰局部变量时,可以在定义时指定初始值,也可以不指定初始值。同样的,final修饰的局部变量一旦被指定初始值后也不可以被重新赋值。这里值得一提的是final修饰的形参,final修饰的形参所在的方法中,final修饰的形参不可以被赋值;
7. 对于final修饰的引用类型变量。引用类型变量保存的仅是一个引用地址,使用final仅能保证变量所保存的地址不发生变动,但是地址中所保存的对象却是可以变化的;
8. final方法不可以被重写。如果不希望子类重写父类的某个方法,可以使用final修饰这个方法;
9. final修饰的类不可以有子类。为了保证某个类不可以被继承,可以使用final修饰这个类。
如题中Pizza类中的addTopping方法就不可被重写。重写会报异常。
scjp考试准备 - 8 - final关键字的更多相关文章
- PHP的final关键字、static关键字、const关键字
在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...
- 浅析Java中的final关键字(转载)
自http://www.cnblogs.com/dolphin0520/p/3736238.html转载 一.final关键字的基本用法 在Java中,final关键字可以用来修饰类.方法和变量(包括 ...
- final关键字(final是最终的)
final关键字(final是最终的) 1.final修饰特点 a.修饰类,类不能被继承 b.修饰变量,变量就变成了常量, 修饰基本数据类:final int num = 10; 修饰引用数据类型变量 ...
- java中对final关键字的理解以及使用场景
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.
- 关于Java中的final关键字
Java中的final关键字是用来限制用户行为的,说白了,就是用来限制我们这些程序员的.final可以用来修饰:变量.方法.类. 1)Java final variable final用来修饰变量时, ...
- 关于java中final关键字与线程安全性
在Java5中,final关键字是非常重要而事实上却经常被忽视其作为同步的作用.本质上讲,final能够做出如下保证:当你创建一个对象时,使用final关键字能够使得另一个线程不会访问到处于" ...
- 深入理解Java中的final关键字
Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...
- 浅析Java中的final关键字
浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...
- 浅析final 关键字
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.下 ...
随机推荐
- Linux下RTL8723BE无线网卡驱动问题解决方法
的RT723BE这款无线网卡模块真是坑爹,岂止是坑爹,简直就是坑爹...... lspci -vnn 看网卡型号 一.安装问题: sudo apt-get install linux-headers- ...
- hdu 4512 吉哥系列故事——完美队形I【LCIS经典应用】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4512 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- CMDB初步了解
本节内容 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infra ...
- 解决putty自动断开的问题
解决putty自动断开的问题 putty窗口上右键>change settings.打开后如下,修改seconds of keepalives,让putty每隔若干秒发送心跳包
- SQL 数据库无法附加,提示 MDF" 已压缩
SQL 数据库无法附加,提示 MDF" 已压缩,但未驻留在只读数据库或文件组中.必须将此文件解压缩 1右键点击数据库所在的文件夹, 2点击属性,在常规选项卡中点击高级, 3在弹出的窗口中 ...
- 我的Android进阶之旅------>Android自定义View实现带数字的进度条(NumberProgressBar)
今天在Github上面看到一个来自于 daimajia所写的关于Android自定义View实现带数字的进度条(NumberProgressBar)的精彩案例,在这里分享给大家一起来学习学习!同时感谢 ...
- error:No resource found that matches the given name 'Theme.AppCompat.Light'
一.stsckoverflow http://stackoverflow.com/questions/17870881/cant-find-theme-appcompat-light-for-new- ...
- C#数组的笔记
Array.Copy的笔记: 1.将值类型的元素装箱位引用类型的元素,比如讲一个Int32[]的元素复制到Object[]中 2.将引用类型的元素拆箱为值类型的元素 3.加宽CLR基元值类型,比如讲一 ...
- C# 事件浅析
前言 对于搞.net的朋友来说,经常会遇到关于事件和委托的问题:事件与委托有什么关系?事件的本质是什么?委托的本质又是什么?由于.net 做了大量的封装,对于初学者,这两个概念确实不怎么好理解.事件是 ...
- knit使用安装 ecstore knit位置 及调用路径
菜鸟一枚,接触php不久. 情况一: 最简单的: windows下, php文件引用kint 将kint放入c盘 php/pear下,我一般将kint包改名字为kint 结构如下: c:/php/pe ...