Java Day2 面向对象

这里写目录标题

  • 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.mzph.cn/news/722738.shtml

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

相关文章

004-深拷贝浅拷贝

深拷贝&浅拷贝 1、值类型 & 引用类型2、概念3、深拷贝3.1 递归遍历3.2 JSON.parse(JSON.stringify())3.3 $.extend3.4 _.cloneDeep 4、浅拷贝4.1 扩展运算符4.2 Object.assign 1、值类型 & 引用类型 值类型:简单数据类型,基本数据类型&…

msg:xxl-rpc remoting error(connect timed out), for url :

使用xxl定时任务时报错。msg:xxl-rpc remoting error(connect timed out), for url : 最开始找不到解决办法,将以下所有的ipv4地址都试了一遍, 包括ping不通的,也将本机的防火墙关闭处理最后ping通了,但还是无法解决。…

浅谈马尔科夫链蒙特卡罗方法(MCMC)算法的理解

1.解决的问题 计算机怎么在任意给定的概率分布P上采样?首先可以想到把它拆成两步: (1)首先等概率的从采样区间里取一个待定样本x,并得到它的概率为p(x) (2)然后在均匀分布U[0,1]上取一个值&a…

媒体邀约服务主要有哪些工作

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体邀约服务是一项繁琐的沟通工作,下面介绍一下51媒体网的主要工作流程。‘ 明确需求:根据客户的传播需求,制定拟邀请媒体名单供客户筛选。 媒体筛选…

RNN循环神经网络及其梯度消失笔记

资料来源 【重温系列】RNN循环神经网络及其梯度消失 手把手公式推导大白话讲解 带时间序列的任务场景 标准神经网络建模的弊端 RNN循环神经网络 网络结构 多输入,多输出 这里的就是对应识别人名的任务,输入就是这里的x1,x2,输出的自然就是0或1了 这种…

针对有容量的电动汽车路由问题的灵活交叉的修正遗传算法

英文:Modified Genetic Algorithm with Flexible Crossover for The Capacitated Electric Vehicle Routing Problem 摘要 本文提出了一种对遗传算法的修改,用一种叫做灵活交叉操作的新技术来解决有容量的电动汽车路由问题(CEVRP&#xff0…

二百二十七、Linux——通过shell脚本判断HDFS文件是否存在,如果存在则删除HDFS文件

一、目的 在用脚本去实现对HDFS中过期的ODS层原始数据进行删除后,发现还需要在脚本中对HDFS文件是否存在进行判断,否则如果HDFS文件不存在那么任务执行就会报错 报错原因是这一天的HDFS文件并不存在 原有脚本 #! /bin/bash source /etc/profile nowda…

python爬虫之Appium 的使用

Appium 是一个跨平台移动端自动化测试工具,可以非常便捷地为 iOS 和 Android 平台创建自动化测试用例。它可以模拟 App 内部的各种操作,如点击、滑动、文本输入等,只要我们手工操作的动作 Appium 都可以完成。在前面我们了解过 Selenium&…

使用 Docker 设置 PySpark Notebook

使用 Docker 设置 PySpark Notebook 第 1 步:拉取 Docker 镜像 首先拉取jupyter/all-spark-notebook包含 Spark 3.5.0 的镜像。 docker pull jupyter/all-spark-notebook:spark-3.5.0 第 2 步:设置您的工作区 在运行 Docker 映像之前,我们…

开源大数据集群部署(十四)Ranger集成Hbase

作者:櫰木 在hd1.dtstack.com主机上执行 在hmaster和back master上进行安装和执行 解压ranger-2.3.0-hbase-plugin [roothd1.dtstack.com ranger-plugin]# cd /root/bigdata [roothd1.dtstack.com ranger-plugin]# tar -zvxf ranger-2.3.0-hbase-plugin -C /opt配…

Unity编辑器功能Inspector快捷自动填充数据和可视化调试

我们有时候可能需要在面板增加一些引用,可能添加脚本后要手动拖动,这样如果有大量的脚本拖动也是不小的工作量 实例 例如:我的脚本需要添加一个Bone的列表,一个个拖动很麻烦。 实现脚本 我们可以用这样的脚本来实现。 public…

Nginx 域名证书 Http 和 Https 详细配置

小伙伴们好,欢迎关注,一起学习,无限进步 项目开发完成后,将项目部署到服务器上时,为了保证安全性和加密通信,我们通常会配置 Nginx 作为反向代理服务器,并使用域名证书启用 HTTPS。下面将为你指…

小程序API能力集成指南——画布API汇总(一)

RJS Canvas Canvas Canvas 实例, 在 RJS 中可通过 getCanvasById 获取。 属性 number width:画布宽度 number height:画布高度 方法 如下。 1、getContext Canvas.getContext(string contextType) RenderingContext Canvas.getContext(string c…

链表(Linked List)算法的使用场景和使用例子详解

链表(Linked List)是一种常见的数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。链表算法在软件开发程序中有着广泛的应用场景。 链表算法基础知识: 链表算法基础知识主要包括链表的基本概…

利用 Redis 和 Lua 实现高效的限流功能

简介 在现代系统中,限流是一种重要的机制,用于控制服务端的流量并保护系统免受恶意攻击或请求泛滥的影响。本文将介绍如何利用 Redis 和 Lua 结合实现高效的限流功能。 一、什么是限流 限流指的是对系统中的请求进行控制和调节,确保系统在…

window安装Miniconda的步骤

安装Miniconda是一个简单直接的过程,适合希望在Windows上进行Python开发而又不想安装Anaconda那样庞大软件包的用户。以下是详细的步骤: 第1步:下载Miniconda安装程序 打开你的网络浏览器,访问Miniconda的官方下载页面&#xff…

Cluade3干货:超越GPT,模型特点分析+使用教程|2024年3月更新

就在刚刚,Claude 发布了最新的大模型 Claude3,并且一次性发布了三个模型,分别是 Claude 3 Haiku:(日本俳句 )Claude 3 Sonnet(英文十四行诗)Claude 3 Opus(古典乐作品集…

docker-compose Install rustdesk

RustDesk RustDesk 是一款开源的远程支持和远程桌面工具,它旨在为用户提供便捷的远程协助和远程访问功能。 默认情况下,hbbs 监听21115(tcp), 21116(tcp/udp), 21118(tcp),hbbr 监听21117(tcp), 21119(tcp)。务必在防火墙开启这几个端口, 请注意21116同时要开启TCP和UDP。…

力扣爆刷第86天之hot100五连刷16-20

力扣爆刷第86天之hot100五连刷16-20 文章目录 力扣爆刷第86天之hot100五连刷16-20一、238. 除自身以外数组的乘积二、41. 缺失的第一个正数三、73. 矩阵置零四、54. 螺旋矩阵五、48. 旋转图像 一、238. 除自身以外数组的乘积 题目链接:https://leetcode.cn/problem…

streamlit初学-用streamlit实现云台控制界面

用streamlit实现云台控制界面 效果图PC上的效果手机上的效果 源码: 本文演示了,如何用streamlit做一个云台控制界面。功能包括:用户登录,事件的处理,图片的更新 版本信息: streamlit_authenticator: 下载链接streamlit : 1.31.1python: 3.11 修改点: streamlit_authenticato…