zoukankan      html  css  js  c++  java
  • Java中的final修饰符

          1.什么时候可以选择final修饰符

      如果想让一个类不被其他类继承,不允许在有子类,这时候就要考虑用到final来修饰。

          2.用final修饰的类

       首先大家要明白,用final修饰的类是不能被继承的,下面来看一个错误案例。

    eg:

    final class Penguin
    
    {
    
    }
    
    class SubPenguin extends Penguin
    
    {
    
    }

    此时这段代码的class SubPenguin extends Penguin这行代码会报错:

    The type SubPenguin cannot subclass the final class :翻译:该类型SubPenguin不能继承的最后类

    即.Penguin类不能被继承。

       3.用final修饰的方法

      eg:

      class Penguin
    
    {
    
        public final void print(){}
    
    } 
    
    class Subpenguin extends Penguin
    
    {
    
       public void print(){}//错误
    
    }

    此时这段代码public void print(){}会报错,提示错误信息:

    cannot override the final method from Penguin:翻译:无法覆盖企鹅的最后方法

    即.print方法不能被子类重写。

       4.用final修饰的变量

       用final修饰的变量包括成员变量和局部变量,他们将变成常量,只能赋值一次。

     public class Dog
    
    {
    
     final String name="小黄";//用final来修饰狗狗的姓名
    
     public void setname(String name)
    
    {
    
       this.name=name;    //错误,name不能在被赋值。
    
    }
    
    }

       5.使用final修饰符的注意点

    final可以用来修饰类,方法和属性,不能修饰构造方法。

      6.用final修饰的引用型变量,变量所指对象的属性值是否能改变?

    首先来看一个简单的例子

    //狗狗类
    
    public class Dog
    
    {
    
      String name;//狗狗的姓名
    
      //带参构造,给狗狗的名字赋值
    
      public Dog(String name)
    
    {
    
       this.name=name;
    
    } 
    
    }
    
    //测试类
    
     class Test
    
    {
    
       public static void main(String[] args)
    
      {
    
        final Dog dog=new Dog("小黄");//实例化一个狗对象,用final修饰
    
       dog.name="大黄";
    
       dog=new Dog("小八");
    
       }
    
    }

      这段代码中dog对象被修饰为final成常量,其值不可变,但要注意的是dog.name="大黄";这行代码并没有错,那么dog=new Dog("小八")是错的,也就是说,使用final修饰的引用型变量,变量不可以在指向另外的对象,但是所指变量的内容是可以改变的。

    结论:使用final修饰的引用型变量时,变量的值时固定不变的,而变量所指对象的属性值是可变的。

  • 相关阅读:
    AcWing 第 12 场周赛
    AtCoder Beginner Contest 170 (D~F题,D筛法,E multiset使用,F Dijkstra算法改进)
    Codeforces Round #650 (Div. 3) F1经典离散化DP
    Codeforces Round #738 (Div. 2) (A~E)
    AtCoder Beginner Contest 214 (D并查集,E反悔贪心,F公共子序列DP)
    c++ 跨平台线程同步对象那些事儿——基于 ace
    博客园排名预测
    关于netty
    全局获取HttpContext
    【设计模式】设计模式学习笔记之(一)——类图、对象之间的关系及设计模式概要
  • 原文地址:https://www.cnblogs.com/hyjj/p/5403270.html
Copyright © 2011-2022 走看看