题目,如下代码的执行结果:

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关键字的更多相关文章

  1. PHP的final关键字、static关键字、const关键字

    在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...

  2. 浅析Java中的final关键字(转载)

    自http://www.cnblogs.com/dolphin0520/p/3736238.html转载 一.final关键字的基本用法 在Java中,final关键字可以用来修饰类.方法和变量(包括 ...

  3. final关键字(final是最终的)

    final关键字(final是最终的) 1.final修饰特点 a.修饰类,类不能被继承 b.修饰变量,变量就变成了常量, 修饰基本数据类:final int num = 10; 修饰引用数据类型变量 ...

  4. java中对final关键字的理解以及使用场景

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.

  5. 关于Java中的final关键字

    Java中的final关键字是用来限制用户行为的,说白了,就是用来限制我们这些程序员的.final可以用来修饰:变量.方法.类. 1)Java final variable final用来修饰变量时, ...

  6. 关于java中final关键字与线程安全性

    在Java5中,final关键字是非常重要而事实上却经常被忽视其作为同步的作用.本质上讲,final能够做出如下保证:当你创建一个对象时,使用final关键字能够使得另一个线程不会访问到处于" ...

  7. 深入理解Java中的final关键字

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  8. 浅析Java中的final关键字

    浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...

  9. 浅析final 关键字

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.下 ...

随机推荐

  1. Java版接口自动化--初稿

    一.接口参数的获取: 1.参数通过Excel读取,并将结果写入Excel中 package org.fanqi.operateExcel; import java.io.FileInputStream ...

  2. MySQL中的注释(有三种)

    MysQL支持三种注释: .#... (推荐这种,具有通性) ."-- ..." (注意--后面有一个空格) ./*...*/

  3. 解决----------“win10,不能打字了,已禁用IME”

    登录Windows 10系统桌面后,右键点击左下角的开始菜单图标,然后在弹出菜单中选择“计算机管理”菜单项在打开的“计算机管理”窗口中,找到左侧系统工具下的“任务计划程序”菜单项点击任务计划程序前面的 ...

  4. 巨蟒python全栈开发-第14天 内置函数2 递归 二分查找

    一.今日内容总览 1.内置函数补充 repr() 显示出字符串的官方表示形式 chr() arscii码中的字,转换成位置 ord() arscii码中的位置,转换成字2.递归 自己调用自己 两个口: ...

  5. C# WinForm 只运行一次的MDI子窗体

    public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void ToolColle ...

  6. Centos7 下安装mysql数据库

    centos7系统,安装mysql发现已经默认的是mariadb. 只能安装mariadb,mariadb是mysql一个分支,对mysql完全支持 1 安装 yum -y install maria ...

  7. JD-GUI

    JD-GUI http://jd.benow.ca/ JD-GUI可到官網直接下載.官網除了JD-GUI之外,另提供了Eclipse(JD-Eclipse)和IntelliJ(JD-IntelliJ) ...

  8. Python glob使用

    http://www.cnblogs.com/lovemo1314/archive/2011/04/26/2029556.html 说明: glob是python自己带的一个文件操作相关模块,用它可以 ...

  9. python引入同一目录下的py文件

    python引入同一目录下的py文件 注意:python2和python3的包内import语法有区别,下面介绍一下python3的包内import语法 例如在admin.py文件中要引入dealco ...

  10. Docker Libnetwork Bridge插件实现代码分析----初始化部分

    Bridge driver数据结构如下所示: type driver struct { config *configuration network *bridgeNetwork natChain *i ...