zoukankan      html  css  js  c++  java
  • scjp考试准备

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

    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方法就不可被重写。重写会报异常。

  • 相关阅读:
    微信自动回复
    pyqt5生成的APP制作DMG
    win10 安装MySQL过程和遇到的坑
    CentOS7 虚拟机设置文件共享 VMWareTools安装遇到的坑
    阿里云配置ssl证书服务遇到的几个问题和解决方法
    Linux基于libmemcached,php扩展memcached的安装
    PHP框架CodeIgniter--URL去除index.php
    javascript新窗口打开链接window.open()被阻拦的解决办法
    Centos6.5源码编译安装nginx
    MySQL批量修改数据库的字符集
  • 原文地址:https://www.cnblogs.com/amunote/p/3943341.html
Copyright © 2011-2022 走看看