当前位置: 首页 > news >正文

Java第二阶段---12继承---第三节 final 修饰符

1.应用范围

final修饰符应该使用在类、变量以及方法上

2.final修饰类

注意,你也可以声明整个final。声明为final的类不能被子类化。例如,当创建不可变类(String类)时,这特别有用。

如果一个类被final修饰,表示这个类是最终的类,因此这个类不能够再被继承,因为继承就是对类进行扩展。

示例

package com.cyx.inheritance._final;//final修饰的类不能够被继承
public final class FinalClass {public void show(){System.out.println("这是最终类里面的方法");}}package com.cyx.inheritance._final;
//这里会报编译错误,因为FinalClass不能被继承
public class ChildClass extends FinalClass{
}

3.final修饰方法

你可以将类的某些或所有方法声明为final。在方法声明中使用final关键字表示该方法不能被子类覆盖。object类就是这样做的-它的许多方法都是最终的。

示例

package com.cyx.inheritance._final;public class FinalMethod {public final void show(){System.out.println("这是一个最终方法,不能被重写");}
}package com.cyx.inheritance._final;public class ChildMethod extends FinalMethod {//这里会报编译错误,因为父类中的show()方法是最终的,不可被重写public void show(){}
}

4.final修饰变量

final修饰变量的时候,变量必须在对象构建时完成初始化。final修饰的变量称为常量。

示例

package com.cyx.inheritance._final;public class FinalVariable {//final修饰的变量一定要在对象创建时完成赋值操作,final修饰的变量称之为常量,不可被更改private final int number;//可以直接赋值:private final int number= 10;//static final修饰的变量就是静态常量public static final String COUNTRY = "中国";public FinalVariable(){this.number = 10;}public void change(){
//        this.number = 11;//报错,因为number是一个常量,不能再被更改,因此会报编译错误}
}

思考如下代码的执行过程:

package com.cyx.inheritance.test;public class Father {static{System.out.println("父类静态代码块执行");}public Father(){super();System.out.println("父类构造方法执行");}
}
package com.cyx.inheritance.test;public class Child extends Father{static{System.out.println("子类静态代码块执行");}public Child(){super();System.out.println("子类构造方法执行");}
}
package com.cyx.inheritance.test;public class test {public static void main(String[] args){new Child();//构建Child对象时,发现Child是Father的子类,而Father又是object的子类。因此JVM会首先加载object类//然后再加载Father类,最后再加载Child类。而静态代码块是在类第一次加载时执行,而且只会执行一次。因此//Father类中的静态代码块先执行,然后再执行Child类中的静态代码块,然后才执行new Child();代码,他要去调用父类的构造方法,所以打印是父类构造方法执行再子类构造方法执行//打印顺序://父类静态代码块执行//子类静态代码块执行//父类构造方法执行//子类构造方法执行}
}

从new Child()进去,进去Child类中发现Child他被Father继承,所以最先进入Father类(要不然继承 继承哪里来呢),Father进入,所以Father里面的static最先运行,然后再加载Child里面的static,然后往下走,Child要掉super(),进入Father里面调父类构造方法(即先调用父类,再调用子类构造方法)


http://www.mrgr.cn/news/46660.html

相关文章:

  • SAP消息号 V1599 对于项目 000010 无法确定业务区域
  • 计算机网络 (42)远程终端协议TELNET
  • 自动化办公|xlwings简介
  • 基于SpringBoot框架+Vue2.x+Element-UI技术的在线博客系统设计与实现
  • AIGC时代 | 探索AI Agent的奥秘:四种设计模式引领未来智能趋势
  • typescript语法
  • 询盘鸭跨境电商独立站
  • 软件设计师——系统基础开发
  • 【第2章 开始学习C++】C++语句
  • 力扣1031. 两个非重叠子数组的最大和
  • 体制内的必须要知道的“人情世故”及职场礼仪
  • 快速区分 GPT-3.5 与 GPT-4
  • 腾讯云SDK连麦应用
  • 高质量带货短视频素材来源推荐
  • 2.安装keepalived详细过程
  • [算法] 数组
  • 【必须知道】LLM大模型幻觉(hallucination)的成因和处理测试
  • [C++ 核心编程]笔记 3 引用做函数参数
  • c++11~c++20 thread_local
  • 老外发微信时说“I‘ll ping you”是什么意思?发微信怎么用英语说柯桥学英语到哪里?
  • 计算机网络:数据链路层 —— 数据链路层概述
  • LSTM(长短时记忆网络)
  • 城门(动态规划)
  • 【时时三省】(C语言基础)指针笔试题7
  • TLS 加密的原理和过程
  • C++游戏开发指南