java中的方法的重载和重写、构造器

news2024/12/24 0:20:34

目录

  • 方法的重载和重写、构造器
    • 1.java的修饰符:
    • 2.普通方法
    • 3.构造器(也叫构造方法/构造函数)
    • 4.方法的重载
    • 5.补充
    • 6.方法的重写
    • 7.类的执行顺序
    • 8.再看方法的重写

方法的重载和重写、构造器

1.java的修饰符:

在这里插入图片描述

public修饰的代码,本类和其他类都是可以访问的

private修饰的代码,本类可以访问,但是其他类不可以访问的

2.普通方法

(1)方法是有访问权限的

(2)方法必须写上返回数据的类型,如果不需要返回数据就写void

void stu(){
    System.out.println("学生好好学习");
    return;
}
private int age(){
    return 18;
}

(3)在同一个类当中,方法名可以相同但是方法的签名不能相同(方法的签名=方法名+参数列表的类型(string,int,double…))

例:

void stu(){
    System.out.println("学生好好学习");
}
void stu(String name){
    System.out.println("学生好好学习");
}
void stu(int name){
    System.out.println("学生好好学习");
}
void stu(int name, String a){
    System.out.println("学生好好学习");
}

void stu(int name){
    System.out.println("学生好好学习");
}
void stu(int age){
    System.out.println("学生好好学习");
}

(4)方法上可以用其他的关键字进行修饰,比如 static 和 final,他们有不同的意义

3.构造器(也叫构造方法/构造函数)

作用:在创建对象的时候给对象的变量赋值

(1).在类中构造函数必须和类名相同

(2).在类中有一个默认的不显示的无参数的构造器,

一旦你在类中写一个构造器,那么那个无参构造器就会被覆盖

(3).构造器不需要写返回值

(4).一个类中可以有多个构造函数

public class A {
    private String name;
    private int age;
    private char sex;
    private int sno;
   
    public A(String name){
        this.name=name;
    }//这就是一个构造器
    public A(String name,int age){
        this.name=name;
        this.age=age;
    }
}
public class B {
    public static void main(String[] args) {
        A a=new A("张三");
    }
}

4.方法的重载

发生在本类中; 在同一类中,方法名相同但是列表不同就是方法的重载;能提高方法的功能

这就是方法的重载:

public void stu(){

}
public void stu(String name){

}
public void stu(String name,int age){

}

5.补充

这个时候没有任何方法

在这里插入图片描述

这个时候可以调用很多方法

在这里插入图片描述

原因:

方法的执行流程是不断入栈出栈,一个方法想要入栈,只能被另一个方法调用,main方法本身就需要入栈

6.方法的重写

(1)发生在父子类当中,子类重新实现父类方法的功能

(2)为什么会重写?

继承的本质是代码的复用,在复用的过程中,父类的方法的实现不一定完全使用子类,这个时候就涉及到方法的重写

方法重写之后,子类对象调用的也是重写后的方法

重写前:

A:

public class A{
    public void run(){
        System.out.println("A跑的很快");
    }
}

B:

public class B extends A{
    
}

Test:

public class Test {
    public static void main(String[] args) {
        B b=new B();
        b.run();
    }
}

运行:

在这里插入图片描述

重写后:

A:

public class A{
    public void run(){
        System.out.println("A跑的很快");
    }
}

B:

public class B extends A{
    public void run(){
        System.out.println("B跑的很快");
    }
}

Test:

public class Test {
    public static void main(String[] args) {
        B b=new B();
        b.run();
    }
}

运行:

在这里插入图片描述

7.类的执行顺序

static修饰的代码块在main方法执行之前执行,其目的是修饰 main方法

public class Test extends Base{
    public Test(){
        System.out.println("test constructor");
    }
    public static void main(String[] args) {
        new Test();
    }
    static {
        System.out.println("test static");
    }
}
class Base{
    static {
        System.out.println("base static");
    }
    public Base(){
        System.out.println("base constructor");
    }
}

运行结果:

在这里插入图片描述

这样输出的原因:

在这里插入图片描述

先扫描再编译;先执行父类,再执行子类

程序执行先去找main()方法启动程序

1.扫描Test类,发现有父类Base类,先去扫描父类,发现Base类没有父类*

2.将Base.class加载进方法区,此时Base类中的static代码块执行*

3.将Test.class加载进方法区,此时Test类中的static代码块执行*

4,main方法入栈,main执行new Test();去创建Test类的对象*

5.创建子类对象之前先创建父类对象,所以先执行Base()构造器,再执行Test()构造器*

(1)先扫描Test,因为这里有main方法,扫描之后发现有父类Base,就扫描Base(直到没有父类为止)

(2)然后执行Base,static修饰的代码块在main方法执行之前执行,其目的是修饰main方法,所以先输出 base static,

(3)然后执行Test, 先执行static修饰的代码块,所以接下来输出 test static

(4)然后main方法入栈,调用Test(),创建子类对象,一定先去创建父类对象,所以先执行Base类的构造器,再执行Test类的构造器,所以接下来输出 base constructor,

(5)最后输出 test constructor

8.再看方法的重写

重写前

(子类访问不到父类私有的变量和方法)

在这里插入图片描述

重写后

(一旦发生重写,子类对象优先调用自身重写的方法)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Halcon例程代码解读:安全环检测(附源码|图像下载链接)

安全环检测核心思路与代码详解 项目目标 本项目的目标是检测图像中的安全环位置和方向。通过形状匹配技术,从一张模型图像中提取安全环的特征,并在后续图像中识别多个实例,完成检测和方向标定。 实现思路 安全环检测分为以下核心步骤&…

前端知识补充—HTML

1. HTML 1.1 什么是HTML HTML(Hyper Text Markup Language), 超⽂本标记语⾔ 超⽂本: ⽐⽂本要强⼤. 通过链接和交互式⽅式来组织和呈现信息的⽂本形式. 不仅仅有⽂本, 还可能包含图⽚, ⾳频, 或者⾃已经审阅过它的学者所加的评注、补充或脚注等等 标记语⾔: 由标签构成的语⾔…

springboot根据租户id动态指定数据源

代码地址 码云地址springboot根据租户id动态指定数据源: springboot根据租户id指定动态数据源,结合mybatismysql多数源下的事务管理 创建3个数据库和对应的表 sql脚本在下图位置 代码的执行顺序 先设置主数据库的数据源配置目标数据源和默认数据源有了主库的数据源&#xff…

powershell美化

powershell美化 写在前面 除了安装命令,其他都是测试命令,后续再写进配置文件 安装主题控件 安装主题oh-my-posh,powershell中执行 winget install JanDeDobbeleer.OhMyPosh -s winget oh-my-posh init pwsh | Invoke-Expression # 查看…

Docker监控新纪元:Prometheus引领高效容器监控革命

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 •座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&…

arcgisPro将面要素转成CAD多段线

1、说明:正常使用【导出为CAD】工具,则导出的是CAD三维多线段,无法进行编辑操作、读取面积等。这是因为要素面中包含Z值,导出则为三维多线段数据。需要利用【复制要素】工具禁用M值和Z值,再导出为CAD,则得到…

R 语言 | 绘图的文字格式(绘制上标、下标、斜体、文字标注等)

1. 上下标 # 注意y轴标签文字 library(ggplot2) ggplot(mtcars, aes(mpg, cyl))geom_point()ylab(label bquote(O[3]~(ug / m^3)))2. 希腊字母,如alpha ggplot(mtcars, aes(mpg, cyl))geom_point()ylab(label bquote(O[3]~(ug / m^3)))ggtitle(expression(alpha))…

WebContainerapi 基础(Web IDE 技术探索 一)

前言 随着web技术的发展,在网页端直接运行node.js、实现微型操作系统已经不再是难事。今天介绍的 WebContainers就是一个基于浏览器的运行时,用于执行 Node.js 应用程序和操作系统命令,它完全运行在您的浏览器页面中,提供了文件系…

解决pytorch安装中的三个错误

查明已安装python版本为3.12.7后,创建虚拟环境。 报错内容:ArgumentError: one of the arguments -n/–name -p/–prefix is required 解决方式: 输入 conda create -n pytorch python3.8即可安装成功。 参考文章:https://blo…

LeetCode:104.二叉树的最大深度

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:104.二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节…

上传文件(vue3)

使用el-upload 先上传到文件服务器&#xff0c;生成url 然后点击确定按钮&#xff1a; 保存数据 <template><el-dialog top"48px" width"500" title"新增协议" :modelValue"visible" close"handleClose()">…

PostgreSql+Pgpool-II配置高可用集群(超详细)

一.配置示例 1.1. 基本配置示例 1.1.1. 开始 首先&#xff0c;我们必须学习如何在使用复制之前安装和配置 Pgpool-II 和数据库节点。 1.1.1.1. 安装 Pgpool-II 安装 Pgpool-II 非常简单。 在已解压源 tar ball 的目录中&#xff0c; 执行以下命令。 $ ./configure$ make$ …

2012年西部数学奥林匹克试题(几何)

2012/G1 △ A B C \triangle ABC △ABC 内有一点 P P P, P P P 在 A B AB AB, A C AC AC 上的投影分别为 E E E, F F F, 射线 B P BP BP, C P CP CP 分别交 △ A B C \triangle ABC △ABC 的外接圆于点 M M M, N N N. r r r 为 △ A B C \triangle ABC △ABC 的内…

【自动驾驶】单目摄像头实现自动驾驶3D目标检测

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;传知代码 欢迎大家点赞收藏评论&#x1f60a; 目录 概述算法介绍演示效果图像推理视频推理 核心代码算法处理过程使用方式环境搭建下载权重文件pytorch 推理&#xff08;自动选择CPU或GPU&#x…

帝国CMS自动生成标题图片并写进数据库

帝国CMS背景可自定义&#xff0c;可单独背景也可以随机背景,此插件根帝国cms官方论坛帖子改的&#xff0c;增加了生成图片后写入数据库,笔者的古诗词网 www.gushichi.com 也是这样设置的。 效果图 将下面的代码插入到/e/class/userfun.php中增加如下函数 单独背景代码 //自动…

5G -- 5G网络架构

5G组网场景 从4G到5G的网络演进&#xff1a; 1、UE -> 4G基站 -> 4G核心网 * 部署初中期&#xff0c;利用存量网络&#xff0c;引入5G基站&#xff0c;4G与5G基站并存 2、UE -> (4G基站、5G基站) -> 4G核心网 * 部署中后期&#xff0c;引入5G核心网&am…

达梦官方工具 SQLark数据迁移(oracle->达梦数据库)

应国产化需求需要,需将系统中涉及的各中间件替换成国产中间件,此文介绍了从Oracle迁移数据至达梦dm8的步骤,该文在windos环境下已验证测试过 1 SQLark介绍 SQLark是一款专为信创应用开发者设计的数据库开发和管理工具。它支持快速查询、创建和管理多种类型的数据库系统&#xf…

【Mac】安装 PaddleOCR

环境&#xff1a;Mac M1 芯片 1、安装 1.1 安装 Anaconda Anaconda 安装较为简单&#xff0c;直接在 Anaconda 官网 下载pkg文件&#xff0c;根据向导提示完成安装。 Anaconda 用于搭建 Python 虚拟环境&#xff0c;目的是为了避免与之前环境安装库的版本冲突&#xff0c;另…

AI的进阶之路:从机器学习到深度学习的演变(二)

AI的进阶之路&#xff1a;从机器学习到深度学习的演变&#xff08;一&#xff09; 三、机器学习&#xff08;ML&#xff09;&#xff1a;AI的核心驱动力 3.1 机器学习的核心原理 机器学习&#xff08;Machine Learning, ML&#xff09;突破了传统编程的局限&#xff0c;它不再…

渗透测试实战—某医院安全评估测试

免责声明&#xff1a;文章来源于真实渗透测试&#xff0c;已获得授权&#xff0c;且关键信息已经打码处理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本…