面向对象基础-继承06(final和static)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

final修饰符

final修饰类

表示”最终的类“

当用final修饰一个类时,表明这个类不能被继承

  • 除了这一点外,这个类照常使用,比如创建对象,比如访问方法,比如继承别的类
  • 从设计角度来讲,一个final修饰的类应该是
    • 不需要复用成员
    • 功能已经特别强大,足够满足需求
    • 需要绝对的保证安全,以致于不让它被继承
  • 常见的final类
    • String
    • System
    • Math
    • 所有基本数据类型的包装类和一个Void
      • Boolean,Character,Short,Integer,Long,Float,Double,Byte,Void
  • 除非你十分确定这个类以后不会被用来继承 ,为了保证安全,可以设置一个类为final类
    • 不然一般情况下,尽量不要把一个类设置成final

final修饰方法

表示”最终的方法“

当一个方法被final修饰后,可以被继承,但是无法被重写

  • final修饰方法,就把方法锁住了,任何继承这个方法的类都无法覆盖该方法
  • 如果一个方法已经能够满足需求,并且明确知道它不应该被修改,修改会产生问题
    • 可以将方法设置成final方法
    • 否则,正常情况下,不要随便使用final修饰方法

final修饰变量

表示”最终的变量“,是一种自定义常量,普遍来说,命名应该采用全大写,下划线连接的方式

修饰变量是final用得最多的地方,也是可能混淆的地方

总体来说,final修饰变量后

  • 如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改
  • 如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象
    • 但是其引用的对象的状态是可以改变的

final修饰普通成员变量

  • final修饰普通成员变量,表示常量,创建对象以后,它们的值就不可改变了
  • 总结给普通成员变量赋值的方式
    • 显式初始化语句
    • 构造代码块
    • 构造器
    • 创建对象后,调set方法,或者直接赋值
    • 对于final修饰的普通成员变量,前三种必然要有一种
  • 对于同一个类的同一个final修饰的变量,不同对象可能会有不同的值

final修饰静态成员变量(常用)

  • final修饰静态成员变量,表示全局常量,一个类类加载完毕后,它们的值就不可改变了
    • 被所有对象共享,每个对象都必须有同一个值,且不可改变
  • 给final静态成员变量赋值
    • 显式赋值语句
    • 静态代码块
  • final static 还是static final?
    • 建议用static final

final修饰局部变量

在这里插入图片描述
在这里插入图片描述

  • 在方法体中定义final常量,表示该常量不可更改
  • 必须显式的赋值初始化,不然也没别的方式初始化了
  • 在形参列表中声明final常量,表示该参数是一个常量,在接收后无法修改

特别的final修饰引用数据类型

  • 表示引用指向的对象不可变,但对象的状态可变
  • 例如final修饰Student类型的变量s,则s的地址值不能改变,
  • 也就是说s要始终指向同一个对象。 但是所指对象的属性值可以改变,只要对象的地址不变即可
final修饰普通成员变量,表示常量,创建对象的时候,也只能初始化它的值一次,这个过程中也不能改了。创建对象以后,它们的值就不可改变了
  • 对于一个final变量
    • 构建对象之后,它们的值就不可以被修改了
    • 如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改
    • 如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象
  • 使用final修饰一个基本数据类型变量,该变量就变成了常量,只能被赋值初始的一次
    • 自定义常量,无法在程序执行时改变
    • 对于常量,我们最好static final一起使用
  • 对于基本数据类型而言,final修饰后,值就不可变了
  • 对于引用数据类型而言,final修饰后,引用的地址就不可变了,但引用对象的状态可以改变

注意:

  • 常量必须显示初始化,即必须赋值一次,不用能默认值。

  • 只能赋值一次,即使之后的赋值和原来的值一样也不行

杀牛用鸡刀

读下列代码,分析执行结果

public int test(final int a){
    //return a++;
    return a+1;
}
public class Test{
    public static void main(String[] args){
        Student s = new Student();
        new Test().test(s);
    }
    public void test(final Student s){
        s = new Student();
        //s.age++;
    }
}
class Student{
    public int age;
}

static修饰符

static概念及特点

在这里插入图片描述
在这里插入图片描述

static访问特定

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值