首页 > 编程语言 >Java学习笔记9

Java学习笔记9

时间:2023-01-10 21:45:12浏览次数:44  
标签:Java 变量 子类 代码 Dog 笔记 学习 修饰 类型

1. 多态

1.1 多态

​ 多态是指同一种行为具有多种不同的表现形式。

前提

  • 有继承或者实现关系
  • 有方法重写(没有重写多态就没有意义)
  • 父类引用指向子类对象

格式

父类类型 变量名 = new 子类/实现类构造器;
变量名.方法名();

运行特点

  • 调用成员变量时:编译看左边,运行看左边
  • 调用成员方法时:编译看左边,运行看右边

弊端

​ 如果子类有独有的功能,多态的写法无法访问子类独有的功能。

1.2 引用类型转换

​ 想要访问子类独有的功能,需要进行引用类型转换。

1.2.1 向上转型(自动转换)

​ 多态本身就是子类类型向父类类型向上转换的过程,这个过程是默认的。

​ 父类类型相对于子类类型来说是大范围的类型,所以范围小的子类可以直接自动转换为范围大的父类。

1.2.2 向下转换(强制转换)

​ 父类类型向子类类型向下转换的过程,这个过程是强制的。

1.2.3 instanceof关键字

​ 转型的过程中一不小心就会引发ClassCastException,即类型转换异常。

如下:

public class Test {
    public static void main(String[] args) {
        // 向上转型  
        Animal a = new Cat();  
        a.eat();               // 调用的是 Cat 的 eat

        // 向下转型  
        Dog d = (Dog)a;       
        d.watchHouse();        // 调用的是 Dog 的 watchHouse 【运行报错】
    }  
}

​ 这段代码可以通过编译,但是运行时,却报出了 ClassCastException ,类型转换异常!这是因为,明明创建了Cat类型对象,运行时,当然不能转换成Dog对象的。

为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验,格式如下:

变量名 instanceof 数据类型 
如果变量属于该数据类型或者其子类类型,返回true。
如果变量不属于该数据类型或者其子类类型,返回false。

instanceof新特性

JDK14的时候提出了新特性,把判断和强转合并成了一行

//先判断a是否为Dog类型,如果是,则强转成Dog类型,转换之后变量名为d
//如果不是,则不强转,结果直接是false
if(a instanceof Dog d){
    d.lookHome();
}else if(a instanceof Cat c){
    c.catchMouse();
}else{
    System.out.println("没有这个类型,无法转换");
}

2. 包

  1. 什么是包?包的作用是什么?
    • 包就是文件夹,用来管理各种不同功能的类
  2. 包名的书写规则?
    • 公司域名反写+包的作用,需要全部英文小写,见名知意,如:com.kuaicode.test
  3. 什么是全类名?
    • 包名+类名 如:java.lang.String

使用其他类的规则:

  • 使用同一个包中的类时,不需要导包。
  • 使用java.lang包中的类时,不需要导包。
  • 除以上两种情况外都需要导包
  • 如果同时使用两个包中的同名类,需要使用全类名

3. final

final的作用:

  • 修饰方法:表明该方法是最终方法,不能被重写

  • 修饰类:表明该类是最终类,不能被继承

  • 修饰变量:被修饰的变量叫做常量,只能被赋值一次

    细节:

    final修饰的变量是基本数据类型:变量存储的数据值不能改变

    final修饰的变量是引用数据类型:变量存储的地址值不能改变,对象内部的数据可以改变

常量

  • 实际开发当中,常量一般作为系统的配置信息,方便维护,提高可读性。
  • 常量的命名规范:
    • 单个单词:全部大写
    • 多个单词:全部大写,单词之间用下划线隔开

3. 权限修饰符和代码块

3.1 权限修饰符

在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限。

  • public:公共的,所有地方都可以访问。

  • protected:本类、本包以及其他包中的子类可以访问。

  • 默认(不写修饰符):本类和本包可以访问。

  • private:本类可以访问。

    public > protected > 默认 > private

public protected 默认 private
同一类中
同一包中的类
不同包的子类
不同包中的无关类

权限修饰符的使用规则:

​ 实际开发中一般只使用privatepublic

  • 成员变量私有
  • 方法公有

注意:如果方法中的代码是抽取其他方法中共性的代码,这个方法一般也私有。

3.2 代码块

分类

  • 局部代码块
  • 构造代码块
  • 静态代码块

作用

  • 局部代码块:提前结束变量的生命周期(已淘汰)。
  • 构造代码块:抽取构造代码中的重复代码(不够灵活)。
  • 静态代码块:数据的初始化(重点)。

标签:Java,变量,子类,代码,Dog,笔记,学习,修饰,类型
From: https://www.cnblogs.com/kuaicode/p/17041445.html

相关文章

  • FastAPI学习
      fromfastapiimportFastAPIfromenumimportEnumfrompydanticimportBaseModelfromtypingimportUnionapp=FastAPI()classModelName(str,Enum):......
  • Java(SpringBoot)项目打包(构建)成`Docker`镜像的几种方式
    前置说明最为原始的打包方式spring-boot-maven-plugin插件jib-maven-plugin插件dockerfle-maven-plugin插件最为原始的方式也就是使用Docker的打包命令去打包,麻......
  • [JavaScript]判断是否为pc页面、是否为ios页面
    常用于pc页面与h5页面的跳转和适配,区分不同设备进行下载跳转区分。 varis_pc=!(navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|......
  • 03-Java流程控制
    一、用户交互Scanner1.1Scanner对象​ Java给我们提供了一个工具类,java.util.Scanner,该工具类是Java5的新特征,可以通过Scanner类来获取用户的输入。创建Scanner对象......
  • JavaScript 扁平数据与树形结构数据的转换
    一、扁平转树形在JavaScript中,可以使用递归算法将扁平的数据转换为树形结构。扁平数据通常是一个带有parentId属性的数组,而树形结构通常是一个带有children属性......
  • 2023/1/10 20221321杨渝学习打卡
    python入门学习学习链接https://www.bilibili.com/video/BV14r4y1k7F9/?spm_id_from=333.999.0.0&vd_source=a989a1afa6cb8b6527dd9bf059d71439if判断while循环布尔......
  • java的基础语法
    java的基础语法注释/标识符/关键字注释注释并不会被执行,是给我们写代码的人看的。书写注释是一个非常好的习惯Java中的注释类型单行注释://+内容(需要换行写)可......
  • JavaScript 实用工具方法库
     utils.jsimportmomentfrom'moment';exportfunctionfixedZero(val){returnval*1<10?`0${val}`:val;}exportfunctiongetTimeDistance(type){......
  • 数据库学习第一天概述1
    视频别人的笔记的目录对应视频的内容(这节课是概述没有要记忆的点)......
  • excel的学习6
    格式化表格是一种突出我们想要的数据的一种方式具体操作第一步:选中要操作的列第二步:找到开始栏中的条件格式(如下图所示)第三步:点开条件格式我们可以看到很多的选项,我......