zoukankan      html  css  js  c++  java
  • final,权限,引用类型数据

    1. final关键字

    1.概述

    为了避免子类出现随意改写父类的情况,java提供了关键字final,用于修饰不可改变内容

    • final:不可改变,可以修饰类,方法和变量
      • 类:被修饰的类,不能用于继承
      • 方法:被修饰的方法,不能被重写
      • 变量:被修饰的变量,不能重新赋值

    2.使用方式

    修饰类

    格式如下:

    public final class 类名{
      
    }
    含义: 当前这个类不能拥有任何的子类. (太监类)
    注意: 一个类如果是final的, 那么其中的所有的成员方法都无法进行覆盖重写(没有儿子)
    

    String,Math,Scanner这些类都是被final修饰的,目的是供我们使用,而不让我们改变内容

    修饰方法

    格式:

    修饰符 final 返回值类型 方法名(参数列表){
      //方法体
    }
    //注意: 对于类,方法来说, abstract关键字和关键字final 不能同时使用,矛盾
    

    重写final修饰的方法,编译时就会报错

    修饰变量
    1.局部变量—基本类型

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

    public class FianlDemo{
      public static void main(String[] args){
        // 声明变量,被final修饰
        final int a;
        //第一次赋值
        a = 10;
        //第二次赋值直接报错
        final int b = 10;
      }
    }
    
    写法一
    final int c = 0;
    for(int i=0;i<10;i++){
      c = i;
      System.out.println(c);
    }
    
    写法二
    for(int i=0;i<10;i++){
    	final int c = i;
    	System.out.println(c);
    }
    

    写法二不会报错,因为每一次循环都是一个新的变量

    2.局部变量--引用类型数据

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

    public class FinalDemo2{
      public static void main(String[] args){
        // 创建User对象
        final User u = new User();
        // 创建另一个对象
        u = new User(); //报错
        //调用方法
        u.setName("张三"); //可以修改
      }
    }
    
    3.成员变量

    成员变量设计到初始化的问题,初始化两种二选一:

    1. 显示初始化

      public class User{
        final String UserName = "张三";
        private int age;
      }
      
    2. 构造方法初始化

      public class User{
        final String UserName;
        private int age;
        public User(String username, int age){
          this.UserName = username;
          this.age = age;
        }
      }
      // 注意: 被final修饰的常量名称,一般全部大写
      

    2.权限修饰符

    在java中四种访问权限,使用不同的权限修饰符修饰时,被修饰的内容会有不同的访问权限

    1. public: 公共的
    2. protected:受保护的
    3. default:默认的
    4. private:私有的

    1.不同权限的访问能力

     publicprotecteddefaultprivate
    同一个类中 yes yes yes yes
    同一个包中(子类与无关类) yes yes yes  
    不同包的子类 yes yes    
    不同包的无关类 yes      

    public是最大权限,private是最小权限

    编译代码建议:

    1. 成员变量使用 private, 隐藏细节
    2. 构造方法使用 public,方变创建对象
    3. 成员方法使用 public ,方便调用

    不加修饰符,其访问能力就是default相同

    3.引用数据用法总结

    1.class作为成员变量

    类作为成员变量的时候,对他进行的赋值操作,实际上是赋值给类的一个对象

    2.interface作为成员变量

    接口作为成员变量的时候,对他进行的赋值操作,事假上,就是赋值给借口的一个子类对象

    3.interface作为方法参数和返回值类型

    接口作为参数的,传递的是子类对象

    接口作为返回值类型的时候,返回它的子类对象

  • 相关阅读:
    《影响力》为你剖析营销的魅力 伍卓钧
    教你如何掌控别人 伍卓钧
    针对面向对象接口最诡异的解读 伍卓钧
    2011年终总结 伍卓钧
    打造阅读Linux源代码利器 伍卓钧
    系统运维的那些事文件权限 伍卓钧
    风扇控制系统最终版 伍卓钧
    码农小手册1 伍卓钧
    码农充电站进程与线程 伍卓钧
    面霸不容易且面且珍惜 伍卓钧
  • 原文地址:https://www.cnblogs.com/liudemeng/p/11357081.html
Copyright © 2011-2022 走看看