Java Day2 面向对象

news2025/2/24 2:28:31

这里写目录标题

  • 1、static总结
    • 1.1 代码块
      • 1.1.1 静态代码块
      • 1.1.2 实例代码块
      • 1.1.3 小例子
  • 2、继承
    • 2.1 权限修饰符
    • 2.2 方法重写
    • 2.3 子类访问成员特点
    • 2.4子类构造器的特点
  • 3、多态
  • 4、final、常量
    • 4.1 final
    • 4.2 常量
  • 5 抽象类
    • 5.1 概念
    • 5.2 模板设计方法
  • 6、接口
    • 6.1 接口新方法
    • 6.2 接口其他特性

1、static总结

1、static 可以用来修饰变量和方法 变为类变量或者类方法。
类变量和类方法 跟随类一起加载,由于类只被加载一次,所以类变量和类方法也只被加载一次。
2、类变量和类方法属于类本身,所有对象可共享,直接使用类名.类变量或者类方法名 就可以调用,也可以使用实例.来调用/
3、类方法只能访问类变量;
实例方法既可以访问实例变量也可以访问类变量;
实例方法允许使用this关键字,类方法不允许。
4、单例设计模式:
①设计模式是指解决一个问题的最优解
②单例设计模式 确保一个类只有一个对象 可以节约内存 比如任务管理器,运行时环境等,只有一个对象即可。
写法:
饿汉式单例:在拿对象时,对象就已经创建好了。

package com.cky.static_demo;

public class A {
    //2、创建一个私有的类对象
    private static A a=new A();
    //1.构造器私有
    private A(){
        
    }
    
    //3' 设计一个方法 返回类对象
    public A getA(){
        return a; //由于类对象 只加载一次 所以不论调用几次 都是一个对象
    }
}

懒汉式单例:在拿对象时,才创建对象

package com.cky.static_demo;

public class A {
    //2、创建一个类对象用来保存
    private static A a;
    //1.构造器私有
    private A(){

    }

    //3' 设计一个方法 返回类对象
    public A getA(){
        if(a==null){ //第一次
            a=new A();
        }
        return a; //由于类对象 只加载一次 所以不论调用几次 都是一个对象
    }
}

1.1 代码块

代码块分为静态代码块 和 实例代码块
代码块都在构造器之前运行。

1.1.1 静态代码块

写法:

static {}

特点:
由于类只会加载一次,所以类代码块也只会加载一次

作用:
用来完成对类的初始化 比如一些类变量 Socket 中就使用了静态代码块。

1.1.2 实例代码块

写法:
{}
特点:每次创建类对象时,都会被调用,且在构造器之前被调用

作用:
完成对类对象的初始化,例如对实例对象进行初始化赋值。

1.1.3 小例子

package com.cky.static_demo;

public class A {
    //静态代码块
    static {
        System.out.println("111");
    }
    //实例代码块
    {
        System.out.println("222");
    }
    
    //构造器
    public A(){
        System.out.println("333");
    }
}

package com.cky.static_demo;

public class Test {
    public static void main(String[] args) {
        A a = new A();
    }

}

结果
111
222
333

2、继承

java是单继承,但是可以多层继承。

2.1 权限修饰符

在这里插入图片描述

2.2 方法重写

在这里插入图片描述

2.3 子类访问成员特点

在这里插入图片描述

2.4子类构造器的特点

在调用子类构造器时,都会先调用父类构造器(可以不写,会自动在上边加super()。
但是如果父类构造器 写了一个有参数构造器,
①要么在子类中显示写出调用的父类有参构造器
②要么,在父类中在添上一个无参构造器.因为如果自己写了一个有参构造器,就不会自动生成无参构造器了。

this(…) 可以被用来调用本类中的其他构造器(兄弟构造器),但是要注意:this(…)和super(…)不能写在一起,因为如果调用了兄弟构造器,则最底层的兄弟构造器是会调用父类构造器的。
在这里插入图片描述

3、多态

多态 分为 对象多态(比如一个人 可以是老师 也可以是母亲等)和行为多态(对于跑这个动作,对于学生来说 可能跑的快 但是老师 可能就会跑得慢)

对于属性变量 没有多态一说
对于行为 编译看左边,执行看右边。
对于属性 编译看左边,执行看左边。

多态有一个缺点:
即无法执行子类自己独有的方法,编译不同过,此时我们需要进行强转。

package com.cky.dt;

public class Test {
    public static void main(String[] args) {
        People p=new Student();
        p.run();//编译看左边,执行看右边
        System.out.println(p.name);//编译看左边,执行看左边
        People p1=new Teacher();
        p1.run();
        System.out.println(p1.name);
        go(p);
        go(p1);
    }
  //强转 因为不强转无法执行 子类独有的功能(由于编译看左边
    public static void go(People p){
        if(p instanceof Student){
            Student s=(Student)p;
            s.learn();
    }
      else {
            Teacher t=(Teacher) p;
            t.teach();
        }
    }
}
class People{
    public String name="cui";
    public void run(){
        System.out.println("people run");
    }
}
class Student extends People{
    public String name="kai";
    public void run(){
        System.out.println("Student run");
    }
    public void learn(){
        System.out.println("Student learn");
    }

}
class Teacher extends People{
    public String name="yue";
    public void run(){
        System.out.println("Teacher run");
    }
    public void teach(){
        System.out.println("Teacher teach");
    }

}

结果:
Student run
cui
Teacher run
cui
Student learn
Teacher teach

4、final、常量

4.1 final

final 可以用来修饰类,方法和属性

修饰类即表示该类不能被继承或者实现了。
修饰方法,证明该方法不能被重写。
修饰变量,证明该变量只能被赋予一次值,不能二次赋值。
变量:局部变量和全局变量 全局变量又分为静态成员变量和实例成员变量。

final 修饰基本数据类型,即该值不能被二次修改。
final修饰引用数据类型是指其地址不能被修改,比如数组,但是我们还是可以修改其值的。

4.2 常量

java中的常量通常被 static final修饰
比如 public static final String ADDRESS="上海";
在编译时 直接就被宏替换了 而不用通过ADDRESS 再去找到"上海这个值",节约时间。

5 抽象类

5.1 概念

在这里插入图片描述

在这里插入图片描述

5.2 模板设计方法

在这里插入图片描述

6、接口

在这里插入图片描述

在这里插入图片描述
接口案例:
在这里插入图片描述
分析:
在这里我们首先可以先 定义一个学生类 用来保存学生的信息,之后定义一个班级类 用来保存所有学生信息以及进行一个操作,比如打印学生信息等等。
但是由于打印学生信息有两套方案,我们不能在一个里边完成,这时候就需要接口了,
定义一个接口类,里边有两个方法(抽象),接着用两个类去实现它,已完成不同的操作,最后在班级类里实例化该接口,如果用方案一就实例化方案一的类,以此类推。

6.1 接口新方法

在这里插入图片描述

6.2 接口其他特性

在这里插入图片描述

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

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

相关文章

Java工程师必备知识,系列教学

一、前言 在这里我不得不感慨Spring的代码的完善与优秀,从之前看源码迷迷糊糊到现在基本了解Spring的部分源码后,愈来愈发现Spring开发者的思虑之周全! 之前说过学习源码的目的在哪?正如我特别喜欢的一句话,有道无术…

进口及国内细胞分析仪厂家名录大全-贝克曼、安捷伦、希森美康、迈瑞.....

流式细胞仪是一种测量层流中细胞的设备(细胞仪),其通过将每个细胞排列在鞘液中,加以激光束照射,可测量散射光和荧光,从而获得有关每个细胞的信息,包含细胞结构(如大小、粒度、表面积…

移动开发:网格视图

一、在新建GridView模块下添加图片以及创建cell.xml文件 1.粘贴图片时选择红框中的路径,点击“OK” 2.在路径后添加-mdpi后缀,再点击“OK” 二、相关代码块 1.MainActivity.java文件代码 package com.example.gridview;import androidx.appcompat.app.AppCompatAc…

指针的学习4

目录 回调函数 qsort使用样例 使用qsort函数排序整形数据 使用qsort函数排序结构体 回调函数 回调函数就是一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时&#xf…

如何使用达摩盘

目录 1.定义 2.功能:圈人群、画像洞察、同步到站内渠道投放; 1.定义 是阿里妈妈基于商业化营销场景打造的人群精细化运营定向中台,涵盖消费行为、兴趣偏好、地理位置等海量数据标签,为商家提供个性化人群圈选,识别店…

入门指南:使用uni-app构建跨平台应用

入门指南:使用uni-app构建跨平台应用 🌟 前言 欢迎来到我的小天地,这里是我记录技术点滴、分享学习心得的地方。📚 🛠️ 技能清单 编程语言:Java、C、C、Python、Go前端技术:Jquery、Vue.js、R…

WebGIS开发0基础必看教程:矢量查询

1.前言 在第七章里我们知道了WebGIS中要素的本质是UIComponent,而矢量图层的本质是包含了n(n>0)个UIComponent的Canvas。我们在UIComponent的graphics中,根据矢量数据画出矢量的形状(shape),并且将矢量数据的属性(…

C及C++每日练习(1)

一.选择&#xff1a; 1.以下for循环的执行次数是&#xff08;&#xff09; for(int x 0, y 0; (y 123) && (x < 4); x); A.是无限循环 B.循环次数不定 C.4次 D.3次 对于循环&#xff0c;其组成部分可以四个部分&#xff1a; for(初始化;循环进行条件;调整) …

信息安全是什么

信息安全&#xff0c;也称为信息安全或数据安全&#xff0c;是防止未经授权的访问、更改、中断和破坏信息。 信息安全本身包括的范围很大&#xff0c;大到国家军事政治等机密安全&#xff0c;小范围的当然还包括如防范商业企业机密泄露&#xff0c;防范青少年对不良信息的浏览…

词嵌入向量和位置编码向量的整合

词嵌入向量和位置编码向量的整合 flyfish 文本序列 -> 输入词嵌入向量&#xff08;Word Embedding Vector&#xff09;-> 词向量 位置编码向量&#xff08;Positional Encoding Vector&#xff09; Embedding 的维度使用了3 可以输出打印看结果 from collections im…

sylar高性能服务器-日志(P57-P60)内容记录

文章目录 P57-P60&#xff1a;序列化模块Varint&#xff08;编码&#xff09;Zigzag&#xff08;压缩&#xff09;class ByteArrayNode&#xff08;链表结构&#xff09;成员变量构造函数写入读取setPositionaddCapacity 测试 P57-P60&#xff1a;序列化模块 ​ 序列化模块通常…

【Java EE】文件内容的读写⸺数据流

目录 &#x1f334;数据流的概念&#x1f338;数据流分类 &#x1f333;字节流的读写&#x1f338;InputStream&#xff08;从文件中读取字节内容)&#x1f33b;示例1&#x1f33b;示例2&#x1f33b;利用 Scanner 进行字符读取 &#x1f338;OutputStream(向文件中写内容&…

当CV遇上transformer(一)ViT模型

当CV遇上transformer(一)ViT模型 我们知道计算机视觉(Computer Vision)&#xff0c;主要包括图像分类、目标检测、图像分割等子任务。 自AlexNet被提出以来&#xff0c;CNN成为了计算机视觉领域的主流架构。CNN网络结构主要由卷积层、池化层以及全连接层3部分组成&#xff0c;其…

Uni-ControlNet: All-in-One Control toText-to-Image Diffusion Models——【论文笔记】

本文发表于NeurIPS 2023 项目官网&#xff1a;Uni-ControlNet: All-in-One Control to Text-to-Image Diffusion Models 一、Introduction 近两年来&#xff0c;扩散模型在图像合成任务中表现优异&#xff0c;尤其是文本到图像&#xff08;T2I&#xff09;扩散模型已成为合成高…

腾达路由器检测环境功能破解MISP基础

在虚拟机上用qemu运行腾达路由器的网站固件会遇到无法识别网络的问题&#xff0c;这篇主要是破解这个功能&#xff0c;使腾达路由器成功在虚拟机上运行&#xff0c;方便漏洞复现 本次用到的腾达路由器版本&#xff1a; https://www.tenda.com.cn/download/detail-3683.html下…

Python 开发图形界面程序

用 Python 语言开发图形界面的程序&#xff0c;有2种选择&#xff1a; Tkinter 基于Tk的Python库&#xff0c;这是Python官方采用的标准库&#xff0c;优点是作为Python标准库、稳定、发布程序较小&#xff0c;缺点是控件相对较少。 PySide2/PySide6 基于Qt 的Python库&#x…

玩家至上:竞技游戏设计如何满足现代玩家的需求?

文章目录 一、现代玩家需求分析二、以玩家体验为核心的游戏设计三、个性化与定制化服务四、强化社交互动与社区建设五、持续更新与优化《游戏力&#xff1a;竞技游戏设计实战教程》亮点编辑推荐内容简介目录获取方式 随着科技的飞速发展和游戏产业的不断壮大&#xff0c;现代玩…

软件测试之Web自动化测试

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、自动化测试基本介绍 1、自动化测试概述&#xff1a; 什么…

Android布局优化之include、merge、ViewStub的使用,7年老Android一次坑爹的面试经历

前言 开发10年&#xff0c;老码农&#xff0c;曾经是爱奇艺架构 点击领取完整开源项目《安卓学习笔记总结最新移动架构视频大厂安卓面试真题项目实战源码讲义》 师&#xff0c;东芝集团高级工程师&#xff0c;三星架构师。5年之内频繁被辞退。内心拔凉拔凉的&#xff0c;在这五…

Android大厂高级面试题灵魂100问,带你彻底弄明白

“2020年技术没有成长&#xff0c;我今年一定要好好努力学习&#xff01;” “在现在这个公司都工作了3年了&#xff0c;一毛钱工资都没有涨…” “年前真倒霉&#xff0c;老板嫌我工资高&#xff0c;被优化了&#xff0c;年后又遇到了疫情&#xff0c;现在都还没有找到合适的工…