java学习笔记7

13. final关键字

​ final的意思是“最终的”。在java中,可以使用final关键字声明类、属性、方法,要注意以下几点:

  • 使用final修饰的类不能有子类,不可被继承。
  • 使用final修饰的方法不能被子类重写。
  • 使用final修饰的变量(成员变量和局部变量)是常量,不可被重新赋值。

13.1 final修饰类

​ java中类被final修饰后,该类无法被继承,也不能派生出子类。

// final修饰类
public final class Animal {
   
}

// 继承
class Dog extends Animal {
    //报错 java: 无法从最终Animal进行继承
}

// 测试类
class DogTest {
   
  public static void main(String[] args) {
   
    Dog dog = new Dog();
  }
}

​ 上面的代码,编译过程中报错: java: 无法从最终Animal进行继承, 说明final修饰的类无法继承。

13.2 final修饰方法

​ 当使用final修饰方法时,子类无法重写此方法。

// Animal父类
public class Animal {
   
  public final void shout() {
   
  }
}

// Dog子类
class Dog extends Animal {
   
  // 重写Animal类的shout()方法
  public void shout() {
    // 报错: java: Dog中的shout()无法覆盖Animal中的shout()
  }
}

// 测试类
class DogTest {
   
  public static void main(String[] args) {
   
    Dog dog = new Dog();
  }
}

​ 上面的代码,编译过程中报错: java: Dog中的shout()无法覆盖Animal中的shout(), 被覆盖的方法为final。

13.3 final修饰变量

​ 在java中,使用final修饰的变量是常量,只能在定义时被赋值一次,在程序无法修改常量的值。

// 局部常量
public class DogTest {
   
  public static void main(String[] args) {
   
    final int AGE = 20;
    AGE = 18; // 报错,不能重新赋值给常量
  }
}

// 全局常量
class Dog {
   
  // 全局常量
  public static final String NAME = "哈士奇";

  public static void main(String[] args) {
   
    // 局部常量
    final int AGE = 20;
    final String NAME = "雪纳瑞";
    System.out.println(AGE); // 20
    System.out.println(NAME); // 雪纳瑞
    System.out.println(Dog.NAME); // 哈士奇
  }
}

14. 抽象类和接口

14.1 抽象类

​ 在java中定义一个类时,要定义方法和属性,但有时候方法的实现是无法确定的。如定义Animal类时,shout()方法用于描述动物的叫声,但不同的动物有不同的叫声,因此在shout()方法中无法准确的描述动物的叫声。

​ 针对上面的情况,java通过抽象方法来满足这种需求。

​ 抽象方法是使用 abstract 修饰的成员方法,定义抽象方法时不需要实现方法体。语法如下:

abstract 返回值类型 方法名称 (形参列表);

​ 当一个抽象方法存在某个类中,当前的类必须是抽象类,抽象类也是使用abstract进行的类。语法如下:

abstract class 类名{
  属性;
  访问权限  返回值类型  方法名称(形参列表){		// 普遍方法
  	return [返回值];
  }
  
  访问权限  返回值类型  方法名称(形参列表);		// 抽象方法
}

从上面的语法可以发现,抽象类定义比普通类多了一些抽象方法,其它地方与普通类基本上相同。

抽象类定义的规则如下

  1. 包含抽象方法的类必须是抽象类。
  2. 抽象方法和抽象类都必须使用abstract声明。
  3. 抽象方法只需定义不需要实现。
  4. 如果一个非抽象类继承了抽象类,那么子类必须实现父类中定义的全部抽象方法。
  5. 抽象方法不能使用private修饰,因为抽象方法要在子类中被实现。
// Animal父类
public abstract class Animal {
   
  // 抽象方法shout
  abstract void shout();
}

// Dog子类
public class Dog extends Animal {
   
  // 实现Animal类的抽象shout方法
  public void shout() {
   
    System.out.println("汪汪汪...");
  }
}

public class Cat extends Animal {
   
  @Override
  public void shout() {
   
    System.out.println("喵喵喵...");
  }
}

// 测试类
public class AnimalTest {
   
  public static void main(String[] args) {
   
    Dog dog = new Dog();
    dog.shout(); // 汪汪汪....
    Cat cat = new Cat();
    cat.shout(); // 喵喵喵....
  }
}
练习1: 定义一个抽象类Shape,有抽象方法abstract double area();用于计算面积
有普通方法 void printDescription()输出:This is a shape.
定义一个Circle 类继承Shape类,有私有化属性double radius,常量属性PI=3.14,
对Circle类进行封装,重写area方法,
定义测试类,声明Circle对象,对area方法测试。
package task;

// 抽象类
public abstract class Shape {
   
  // 计算面积的方法
  public abstract double area();

  // 描述图形的信息
  public void printDescription() {
   
    System.out.println("This is a shape.");
  }
}

package task;

// 子类Circle
public class Circle extends Shape {
   
  public static final double PI = 3.14; // 圆周率
  private double radius; // 半径

  public Circle() {
   
  }

  public Circle(double radius) {
   
    setRadius(radius);
  }

  public double getRadius() {
   
    return radius;
  }

  public void setRadius(double radius) {
   
    if (radius < 0) {
   
      System.out.println("圆的半径不能是负数!");
      radius = 0;
    }
    this.radius = radius;
  }

  // 实现父类中的抽象方法area
  public double area() {
   
    return PI * getRadius() * getRadius();
  }

  // 重写方法printDescription
  public 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/570913.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【亲测有用】idea2024.1中前进后退按钮图标添加

idea更新后&#xff0c;前进后退按钮消失了&#xff0c;现在说下怎么设置 具体操作如下&#xff1a; 1、选择 File / Settings(windows版)&#xff0c;或者Preferences(mac版) 2、打开 Appearance & Behavior 并选择 Menus and Toolbars 3、选择右侧的 “Main toolbar lef…

第四百七十七回

文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"Get包简介"相关的内容&#xff0c;本章回中将介绍GetMaterialApp组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经…

C++:模板(初级)

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;模板&#xff08;初级&#xff09;》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞…

Docker 网络与资源控制

一 Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根 据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker网桥是每个容器的默 认网关。因为在同…

C++从入门到出门

C 概述 c 融合了3中不同的编程方式&#xff1a; C语言代表的过程性语言C 在C语言基础上添加的类代表的面向对象语言C 模板支持的泛型编程 1、在c语言中头文件使用扩展名.h,将其作为一种通过名称标识文件类型的简单方式。但是c得用法改变了&#xff0c;c头文件没有扩展名。但是…

Linux gcc day7

动态链接和静态链接 形成的可执行的程序小&#xff1a;节省资源--内存&#xff0c;磁盘 无法c静态库链接的方法 原因是我们没有安装静态c库&#xff08;.a&#xff09; 所以要安装 sudo yum install -y glibc-static gcc static静态编译选项提示错误&#xff1a;/usr/lib/ld:ca…

9.Eureka服务发现+Ribbon+RestTemplate服务调用

order-service服务通过服务名称来代替 ip:port的方式访问user-service服务的接口。 原来的请求代码&#xff1a; Service public class OrderServiceImpl implements OrderService {Autowiredprivate OrderMapper orderMapper;Autowiredprivate RestTemplate restTemplate;Ov…

DataGrip操作Oracle

一、创建表空间 表名任意起&#xff0c;路径自己指定 -- 创建表空间 create tablespace mydb1 -- 表名 datafile E:\Code\sql\oracle\oracle_tablespace\mydb1.dbf --指定表空间路径 size 100M --指定表空间大小 autoextend on next 50M --指定一次扩充多少mb extent managemen…

入门指南:网站UI原型设计的简单方法

从零开始做网站UI原型设计&#xff0c;真的很有成就感&#xff01;那么&#xff0c;UI设计师从零开始做网站UI原型设计需要经历哪些过程呢&#xff1f;设计网站UI原型的第一步&#xff1a;绘制网站线框。本文将主要分为两个阶段&#xff1a;网站线框和原型绘制。 如何制作网站…

Mysql联合索引和最左匹配例子说明

文章目录 前言联合索引最左匹配原则举例说明 前言 是什么是索引&#xff1f; 索引是一种数据结构&#xff0c;用于加速数据库查询。 当没有索引时&#xff0c;数据库系统需要执行全表逐行扫描来满足查询需求。这意味着它会逐行读取整个表中的数据&#xff0c;并在内存中进行比…

最快2周录用!多领域EI,征稿范围广!各指标优秀!

计算机工程类EI&#xff08;最快2周录用&#xff09; 【期刊简介】最新EI期刊目录内源刊 【检索情况】EI&Scopus双检 【版面情况】仅10篇版面 【年发文量】60篇左右 【国人占比】约13% 【收录年份】2009年被EI数据库收录 【审稿周期】预计1个月左右录用 【征稿领域…

【WSL】单机大模型前的基础环境配置

前言&#xff1a;在上一篇文章中&#xff0c;我们完成了WSL的部署&#xff0c;但是在大模型搭建&#xff08;尤其是Langchain&#xff09;前&#xff0c;还碰到了不少的坑&#xff0c;查找了不少的文章&#xff0c;所以本篇文章就做一个记录&#xff0c;避免以后再走冤枉路。 …

【置顶】ARMv8/ARMv9架构入门到精通-[目录]--backup-20240424

快速链接: . &#x1f449;&#x1f449;&#x1f449; 个人博客笔记导读目录(全部) &#x1f448;&#x1f448;&#x1f448; 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/ARMv9架构入门到精通-[目录] &#x1f448;&#x1f448;&#x1f448;联系方式-加入交流群 ---…

Java基础入门1-2

跟着韩顺平老师的30天入门java课程学习&#xff0c;整理一下自己的笔记&#xff0c;方便回顾知识点和复习。 另附上视频链接&#xff1a;0034_韩顺平Java_变量原理_哔哩哔哩_bilibili 第一章&#xff1a;学习前的了解 第二章&#xff1a;Java概述 2.1什么是程序&#xff1f…

韩国机器人公司Rainbow Robotics推出RB-Y1轮式双臂机器人

文 | BFT机器人 近日&#xff0c;韩国机器人领域的佼佼者Rainbow Robotics揭开了RB-Y1移动机器人的神秘面纱&#xff0c;这款机器人以其创新的设计和卓越的功能引起了业界的广泛关注。与此同时&#xff0c;Rainbow Robotics还携手舍弗勒集团&#xff08;提供汽车、工业技术服务…

基于高斯混合模型的视频背景提取和人员跟踪算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2013B 3.部分核心程序 .............................................................................. %我们这里…

如何部署 wfs 分布式服务

说明&#xff1a; wfs是海量小文件存储系统。wfs1.x不直接支持分布式存储&#xff0c;但为了应对大规模部署和高可用需求&#xff0c;推荐采用如Nginx这样的负载均衡服务&#xff0c;通过合理的资源配置和定位策略&#xff0c;可以在逻辑上模拟出类似分布式的效果。也就是说&am…

ROC和AUC

什么是ROC和AUC ROC曲线&#xff08;Receiver Operating Characteristic curve&#xff09;和AUC&#xff08;Area Under the Curve&#xff09;是用于评估二分类模型性能的重要工具。 ROC曲线以真正例率&#xff08;True Positive Rate&#xff0c;也称为召回率或灵敏度&…

【Java--数据结构】提升数据处理速度!深入理解Java中的顺序表机制

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 两种创建顺序表的方法及区别 认识ArrayList的构造方法 不带参数的构造方法 带参数的构造方法 利用Collection 构造方法 举例 ArrayList 常用方法演示 add addAll remo…

Docker容器搭建Hadoop集群(hadoop-3.1.3)

Docker容器环境下搭建Hadoop集群&#xff08;完全分布式&#xff09; hadoop版本为hadoop-3.1.3 &#xff08;1&#xff09;安装额外的速度较快的镜像库 yum install -y epel-release &#xff08;2&#xff09;安装同步工具&#xff0c;方便在多台服务器上进行文件的传输 …
最新文章