Java基础学习 Day 15

Java基础学习 Day 15

1. final关键字

  • final字意义:关键字用来代表最终的,不可改变

  • 常见四种用法

    1. final可用来修饰类

      //定义一个final类
      /*
      * 当final关键字用来修饰一个类的时候,
      * 格式:public final class 类名称{
      * //...
      * }
      * 含义:当前这个类不能有任何子类
      * */
      public final class MyClass {
          String name;
          public void method(){};
      }
      //不能被任何类继承这个final类,但该类可继承别的类(也就同时说明final类的方法不能被任何类重写和覆盖)
      public class MySonClass extends MyClass{
          //报错 Cannot inherit from final 'com.kou.oop.demo12.MyClass
      }
      
      
    2. final可用来修饰一个方法

      //定义一个普通父类有一个final方法
      /*
      * 当final修饰一个方法时,这个方法就是最终方法,也就是不能被覆盖重写
      * 格式:
      * 修饰符 final 返回值类型 方法名(参数列表){
      * //方法体
      * }
      * */
      public class BasicDemo {
      
          public final void method(){
              System.out.println("父类final方法执行");
          }
      }
      //定义一个类继承该父类 重写方法时发现报错
      public class DerivedDemo extends BasicDemo {
          public final void method(){
              //报错'method()' cannot override 'method()' in 'com.kou.oop.demo12.BasicDemo'; overridden method is final
              System.out.println("父类final方法执行");
          }
      }
      

      ※对于类,方法来说,abstract和final不能同时出现,因为他们本身是具有矛盾意义的

    3. final可用来修饰一个局部变量

      //简单定义一个Student类,有name,age属性和get,set方法等    
      public static void main(String[] args) {
              int num0 = 10;
              System.out.println(num0);
              num0 = 20;
              System.out.println(num0);
              //一旦用final来修饰局部变量,那么这个变量就不能进行更改(保证唯一一次赋值)
              final int num1 = 30;
              //num1 = 31; 报错 //Cannot assign a value to final variable 'num1'
              //当final修饰基本型变量时,数据不能改变
              //当final修饰的局部变量是引用类型时,该引用指向的地址值不能变
              Student stu1 = new Student("Karen",21);
              System.out.println(stu1);//com.kou.oop.demo02.Student@677327b6
              System.out.println(stu1.getName());//Karen
              stu1 = new Student("Kate",32);
              System.out.println(stu1.getName());//Kate
              System.out.println(stu1);//com.kou.oop.demo02.Student@14ae5a5
              //如果对象用final修饰时,则不能再改变该地址值了
              final Student stu2 = new Student("Karen",21);
              System.out.println(stu2);//com.kou.oop.demo02.Student@7f31245a
              System.out.println(stu2.getName());//Karen
              //stu2 = new Student("Kate",32);报错 Cannot assign a value to final variable 'stu2'
              //地址值不变,但是可以调用set方法给其中的成员变量改变值
              stu2.setAge(33);
              stu2.setName("Kyle");
              System.out.println(stu2.getAge() +stu2.getName());//33Kyle	
          }
      
    4. final可用来修饰一个成员变量

      /*
      * 对于成员变量来说:如果使用final关键字来修饰,那么这个变量也照样不可变
      * 1.由于成员变量有默认值,用了final之后就必须手动赋值,不会再有默认值了。
      * 2.对于final的成员变量,要么使用直接赋值要么就通过构造方法赋值
      * */
      //构造方法赋值
      public class Person {
           private final String name; //Variable 'name' might not have been initialized
          //必须保证类中的所有的重载构造方法堆该成员变量进行赋值,并且之后的setter方法不可用,因为只能赋值一次
          //private String name;
      
          public Person() {
               this.name = name;
          }
      
          public Person(String name) {
              this.name = name;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              //this.name = name;//报错 //Cannot assign a value to final variable 'name'
          }
      }
      //手动赋值
      public class Person {
           private final String name = "Karen";//Variable 'name' might not have been initialized
          //必须保证类中的所有的重载构造方法堆该成员变量进行赋值,并且之后的setter方法不可用,因为只能赋值一次
          //private String name;
      
          public Person() {
          }
      
          public Person(String name) {
           
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
             // this.name = name;//报错 //Cannot assign a value to final variable 'name'
          }
      }
      
      

2. 权限修饰符

Java中有四种权限修饰符,从大到小依次为:

※(default)不是关键字default,而是什么也不写叫做默认的权限

访问分类public >protected>(default)>private
同一个类(自己)YesYesYesYes
同一个包(邻居)YesYesYesNo
不同包子类(儿子)YesYesNoNo
不同包非子类(陌生人)YesNoNoNo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值