• Java 面向对象(八) 权限修饰符 和 final、native 关键字


    一、权限修饰符

      1、概述

        在 Java 中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限:

        •  public:公共的;
        •     protected:受保护的;
        •     default:默认的;
        •     private:私有的;

      2、不同权限的访问能力

        

          可见,public 具有最大权限,private 则是最小权限。

        (1)权限修饰符可以修饰什么?

            类(类、接口等)、属性、方法、构造器、内部类

          •   修饰类(外部类):public 和 缺省
          •   修饰属性:  4种都可以
          •   修饰方法:  4种都可以
          •   修饰构造器:  4种都可以
          •   修饰内部类:  4种都可以

          编写代码时,建议这样使用权限:

          •   成员变量使用 private,隐藏细节;
          •   构造方法使用  public,方便创建对象;
          •   成员方法使用  public,方便调用方法;

        注意:不加权限修饰符,其访问能力与 default 修饰符相同。

    二、final 关键字

      1、概述

        子类继承父类后,可以改写父类内容,如方法重写。但是我们却不能随意的去继承 API 中提供的类,然后改写其内容。

        这是因为 Java  提供了 final 关键字,用于修饰不可改变内容。

        final 关键字 :不可改变。可以修饰:类(外部类、内部类),变量(成员变量(类变量、实例变量)、局部变量)、方法(静态方法、非静态方法)

        •  类:被修饰的类,不能被继承,称为“太监类”;
        •    方法:被修饰的方法,不能重写,可以被继承;
        •    变量:被修饰的变量,不能重新赋值,相当于是常量。

      2、使用方式

        (1)修饰类

           定义格式:

    final class 类名 {
       //  方法体
    }

           其实可以发现public final class String、public final class Math、public final class Scanner 等,这些类都是 final 修饰的。目的就是供使用,而不让随意改变其内容。

        (2)修饰方法

           定义格式:

    修饰符 final 返回值类型 方法名(参数列表){
        //方法体
    }
    

           注意:如果重写 final 修饰的方法,编译会报错。

            对于类、方法来说,abstract关键字和final关键字不能同时使用,因为矛盾。

        (3)修饰变量

             a、局部变量 —— 基本类型

            基本类型的局部变量,被 final 修饰后,只能赋值一次,不能再更改。

            Demo:

     1 public class FinalDemo1 {
     2     public static void main(String[] args) {
     3         // 声明变量,使用final修饰
     4         final int a;
     5         // 第一次赋值
     6         a = 10;
     7         // 第二次赋值
     8         a = 20; // 报错,不可重新赋值
     9         // 声明变量,直接赋值,使用final修饰
    10         final int b = 10;
    11         // 第二次赋值
    12         b = 20; // 报错,不可重新赋值
    13     }
    14 }

          b、局部变量 —— 引用类型

            引用类型的局部变量,被 final 修饰后,只能指向一个对象,地址不能再更改。但是不影响对象内部的成员变量值的修改。

            Demo:

     1 public class FinalDemo2 {
     2     public static void main(String[] args) {
     3         // 创建 User 对象
     4         final User u = new User();
     5         // 创建 另一个 User对象
     6         u = new User(); // 报错,指向了新的对象,地址值改变。
     7         // 调用setName方法
     8         u.setName("张三"); // 可以修改
     9      }
    10 }

          c、成员变量

            成员变量涉及到初始化的问题,初始化方式有两种,只能二选一:

          •    显示初始化
    1 public class User {
    2     final String USERNAME = "张三";
    3     private int age;
    4 }
          •    构造方法初始化
    1 public class User {
    2     final String USERNAME ;
    3     private int age;
    4     public User(String username, int age) {
    5         this.USERNAME = username;
    6         this.age = age;
    7     }
    8 }

         注意

          对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值。二者选其一。

          必须保证类当中所有重载的构造方法,都最终会对 final 的成员变量进行赋值

        Tips:被 final 修饰的常量名称,一般都有书写规范,所有字母都大写。

    三、native 关键字

      1、native 概述

        native 意思是原生的,本地的。

      2、native也是一个修饰符,可以修饰什么

        native 是一个修饰符,只可以用来修饰方法。

        语法格式:

    【修饰符】 class 类 {
         【其他修饰符】  native 返回值类型  方法名(【形参列表】);
    }
    

             native 修饰的方法,看不见方法体;

         native 修饰的方法,不是用 Java 语言实现的,而是调用了底层 C/C++ 的代码,这些代码为 .dll 文件,让 Java来执行。

      3、特殊

        (1)native 方法,对于 Java 程序员来说,该怎么调用还怎么调用调用

        (2)子类还可以选择对它进行重写

     

  • 相关阅读:
    小甲鱼PE详解之输入表(导出表)详解(PE详解09)
    小甲鱼PE详解之输入表(导入表)详解2(PE详解08)
    小甲鱼PE详解之输入表(导入表)详解(PE详解07)
    小甲鱼PE详解之区块描述、对齐值以及RVA详解(PE详解06)
    小甲鱼PE详解之区块表(节表)和区块(节)续(PE详解05)
    小甲鱼PE详解之区块表(节表)和区块(节)(PE详解04)
    天大 ACM 1090. City hall
    C++中关于cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
    Integer Inquiry -TJU1112
    天大acm 题号1002 Maya Calendar
  • 原文地址:https://www.cnblogs.com/niujifei/p/11372476.html
Copyright © 2020-2023  润新知