首页 > 编程语言 >JavaSE学习笔记day02

JavaSE学习笔记day02

时间:2023-08-17 09:11:45浏览次数:39  
标签:对象 day02 笔记 子类 JavaSE 父类 方法 public 属性

面向对象
一、面向过程和面向对象的思想
面向过程的思想:
将事情拆分成多个步骤,然后一步一步地完成即可。强调事情的具体步骤/过程。
该思想常见于编码过程中的方法或者函数当中。
比如:打扫教室
(1)先拿到清洁工具
(2)然后扫地
(3)然后拖地
(4)倒垃圾
(5)归还清洁工具
PS:考虑怎么做

面向对象的思想:
将事情交给某个对象去完成。
该思想常见于类、对象当中。
比如:打扫教室
(1)找清洁阿姨
PS:考虑谁去做
注意:面向过程和面向对象是相辅相成的!!!

二、类和对象
面向对象中的一句话:一切皆可对象!
类:是一个生产对象的模板。
对象:具体的事物、具体的实体、具体的实例,根据模板生产的产品
PS:一般在写代码的时候,需要先写类然后在创建对象。

面向对象的三个阶段(设计代码):
(1)OOA:面向对象分析
分析业务中存在哪些事物/实体/实例/对象,然后在根据这些事物/实体/实例/对象的公共特征抽取出一个类
公共特征包含:属性、方法(行为)
比如:
在学生管理系统中,存在许多的学生对象,每个学生具有:学号、姓名、性别、年龄等属性,也具有:吃饭、睡觉、玩手机等行为
(2)OOD:面向对象设计
如何设计类。
(3)OOP:面向对象编程
根据以上两步编写代码创建类和对象。

创建类
创建类的基本语法:
public class 类名 {...}
类当中还有属性,书写属性的语法:
【修饰符】 属性类型 属性名 【= 值】;
类当中还有方法,书写方法的语法:
创建方法的语法是一样的,参照8.14的方法部分。
PS:创建一个类就相当于创建了一种新的引用数据类型

创建对象
基本语法:
类名 对象名 = new 类名();
由于对象是根据类创建出来的,所以对象中也含有属性和方法
调用对象的属性:对象名.属性名
调用对象的方法:对象名.方法名()

构造器(构造方法)
用于初始化属性
基本语法:
public 类名(形参列表){
方法体
}
分类:
无参构造器:没有形参列表的构造器,通过它初始化对象属性时,属性值为默认值
默认值:整型->0、浮点型->0.0、字符型->空字符、布尔类型->false
引用类型->null
有参构造器:有形参列表的构造器,通过形参初始化对象属性
PS:构造器虽然有别于普通的方法,但是其可以重载
规则:
(1)当类中没有构造器的时候,Java会自动添加一个无参构造器
(2)当类中有构造器的时候,Java不会添加任何构造器

this关键字
引入:当有参构造器的形参名和属性名一样的时候,会导致形参和属性无法区分,
此时只需要在属性名前面加上this.即可,以此来标记属性名。
含义:this指代当前对象
PS:谁在使用则this指代谁
延伸:若this应用在方法中,看谁在调用这个方法,那么this指的就是谁

内存分析

三、封装
专业性解释:隐藏对象内部的复杂性,只对外提供简单的借口,以便外部调用。
目的:提高系统的可扩展性、可维护性,做到“高内聚、低耦合”。
PS:将类中的属性使用private修饰(此时属性不能直接调用),然后为
每个属性添加Get和Set方法(通过get和set方法就可以间接地操作属性)。
快速生成代码块的快捷键:alt+insert ---> constructor(构造器)、GetterAndSetter
Get系列的方法:用于获取属性值
Set系列的方法:用于设置属性值
总结:以后创建类记得使用封装!!!
public:是一个访问权限修饰符,表示公共的,即:对外公开
private:是一个访问权限修饰符,表示私有的,即:不对外公开

四、继承
概念:
(1)类是对象的抽象
(2)继承是对类的抽象
比如:有一个教务系统,涉及学生和老师
分析:对象是学生、老师
学生具有:学号、姓名、性别、年龄、专业、学习、睡觉、吃饭
教师具有:工号、姓名、性别、年龄、教研室、授课、睡觉、吃饭
但是学生和教师具有部分相同的属性和方法,所以可以提取出来
封装成一个新的类 ---> People:姓名、性别、年龄、睡觉、吃饭
总体来说,一共涉及三个类:学生、教师、People
设计:
Student:学号、专业、学习
Teacher:工号、教研室、授课
People:姓名、性别、年龄、睡觉、吃饭
由于People中的属性和方法是从Student、Teacher中提取出来的,
所以Student、Teacher继承People
编码:....
extends关键字:用于继承,该关键字放在类名后面
语法:public class A extends B{...}
说明:此时,A继承B,A为子类,B为父类
PS:使用具体的实体类继承公共类
内存分析:...
细节:
(1)当创建子类对象的时候,Java会先调用父类的构造器进行初始化
(2)在编译的过程当中,Java会在子类构造器中添加super(...)来调用
父类的构造器,所以就出现了(1)的情况
(3)关于super的使用:super()表示调用父类构造器,
super.方法名()表示调用父类方法
(4)子类会继承父类的属性和方法,但是父类使用了封装之后,虽然子类
对象中含有父类属性,但是依然不能直接调用,得使用get/set方法
(5)构造器不能被继承!!!

五、多态
方法的重写
大前提:发生在继承关系当中
要求:子类的方法名要和父类的保持一致,参数列表也要保持一致
为什么使用重写?当我们对父类的方法不满意的时候,就可以在子
类的方法中进行进行重写。

多态指的是方法的多态性,即方法具有多种状态。发生在重写的方法里。
比如:s2.eat()中的eat()方法显示的是父类People的,但是运行之后
却是子类Student的。此时eat()具有多态性。

六、Object类
Object类是所有Java类的根类,意味着所有的java对象都拥有Object类的属性和方法。
若在类的声明未使用extends指明其父类,则默认继承Object类
PS:所有的java对象都拥有Object类的属性和方法。
方法:
hasCode():获取对象hash码
toString():获取当前对象所属的类及其十六进制哈希码,
格式:类路径@十六进制哈希码
比如:p04_object_oriented.People@4554617c
应用:在项目开发当中,我们会在类中重写toString()方法来
展示当前对象的属性及其属性值。
规定:编写实体类的时候,我们要在类中书写:private修饰的属性、get和set方法、重写toString()

七、向上转型、向下转型
用于继承关系中,=左右两边的类不一样
向上转型:将子类对象赋值给父类变量
向下转型:将父类对象赋值给子类变量,但是要注意强制转换!!!

八、接口(interface)
接口的作用:
(1)对类的一个规范
(2)对类的一个功能扩展
语法:
public interface 接口名{...}
接口中的内容:
(1)被public static final修饰的常量,其中public static final可省略;
(2)抽象方法:被public abstract所修饰的,并且没有方法体的方法,其中public abstract可省略
(3)被public default修饰的非抽象方法
(4)静态方法:static修饰的方法
重点在于(1)和(2)
细节:
(1)Java类只有单继承,但是有多实现;
(2)Java类使用implements关键字实现接口;
(3)Java类实现接口之后需要重写改接口中所有的抽象方法,否则报错;
(4)Java类若有继承,也有实现,则要先继承后实现;
(5)接口和类是并列的;
(6)抽象方法的实现由实现类决定

需求:
已知乒乓球国家队、排球国家队要去参加友谊赛,要求运动员参加比赛即可,乒乓球教练要学习英语,排球教练要学习法语

标签:对象,day02,笔记,子类,JavaSE,父类,方法,public,属性
From: https://www.cnblogs.com/bwcxin/p/17636686.html

相关文章

  • JavaSE学习笔记day03
    一、异常处理机制当程序中抛出异常时,会导致整个程序中断执行。若要程序不受影响,可以继续往下执行,则使用异常处理机制。异常处理机制:try-catch-finally语法结构:try{可能会抛出异常的代码}catch(异常类型变量名){处理异常的代码}finally{......
  • 拓扑排序算法笔记
    思想拓扑,一看就是从图的开始开始开拓,并按被开拓到的顺序排序拓扑排序的思想如下:将入度为\(0\)的点删除,并记录它被删除的顺序,直到没有点则结束程序代码也十分简单:#include<bits/stdc++.h>usingnamespacestd;boolb[100001];intfat[100001];vector<int>v[100001];i......
  • C# MemCached学习笔记(二)-Linux安装MemCached
      直接采用菜鸟教程的安装教程即可;原文地址:https://www.runoob.com/memcached/memcached-install.htmlLinuxMemcached安装Memcached支持许多平台:Linux、FreeBSD、Solaris、MacOS,也可以安装在Windows上。Linux系统安装memcached,首先要先安装libevent库。sudoapt-getins......
  • mysql-学习笔记
    --根据需求创建表(设计合理的数据类型、长度)--设计一张员工信息表,要求如下:--1.编号(纯数字)--2.员工工号(字符串类型,长度不超过10位)--3.员工姓名(字符串类型,长度不超过10位)--4.性别(男/女,存储一个汉字)--5.年龄(正常人年龄,不可能存储负数)--6.身份证号(二代身份证号均为18位,身份证中......
  • C# MemCached学习笔记(一)-Windows安装MemCached
      直接采用菜鸟教程的安装教程即可;原文地址:https://www.runoob.com/memcached/window-install-memcached.htmlWindows下安装Memcached官网上并未提供Memcached的Windows平台安装包,我们可以使用以下链接来下载,你需要根据自己的系统平台及需要的版本号点击对应的链接下载......
  • Programming abstractions in C阅读笔记: p114-p117
    《ProgrammingAbstractionsinC》学习第48天,p114-p117,​总结如下:一、技术总结主要通过randomnumber介绍了随机数的相关用法,interface​示例(random.h)​,clientprogram示例(craps.c)。#include<stdio.h>#include"genlib.h"#include"random.h"staticboolTryToMakePo......
  • Unity学习笔记------------------unity快捷键
    Unity常用快捷键Q平移场景视图W移动E旋转R缩放FF场景视图聚焦选定物体Z以轴点/中心旋转X全局坐标/局部坐标Ctrl/Cmd+P播放或停止Ctrl/Cmd+Shift+P暂停或恢复Ctrl/Cmd+Shift+B打开BulidSetting窗口Ctrl/Cmd+B发布并运行Ctrl/Cmd+Shift+......
  • 「学习笔记」指针的基础入门
    为啥会突然学这个呢?因为长链剖分优化DP的状态转移用到了指针数组,平时的STL使用中也经常碰到指针。So,就去学了一下,记录一下学习的笔记。我绝对不会告诉你另一个原因是因为最近做DP做累了想来写篇博文水水时间引入我们平时用scanf输入的时候,都会在变量名前加一个&,但是,字......
  • 网络编程day02--FTP协议
    封装socket网络通信模块-network原因:TCP、UDP客户端、服务端的操作流程固定,所以为了后期使用方便,把socket网络通信封装成网络模块任务:生成libnw.so共享库笔试、面试问题:回答原始函数讲项目:聊封装过程FTP协议FTP的独特的优势同时也是与其它客户服务器程序最大的不同点就在于......
  • ACP认证笔记
    每个ecs最多可加入5个安全组,至少加入一个安全组安全组支持有状态应用。一个有状态的会话连接中,会话的最长保持时间是910秒。安全组会默认放行同一会话中的通信。例如,在会话期内,如果连接的数据包在入方向是允许的,则在出方向也是允许的。阿里云的云服务器ECS实例的使用中,要创建新的安......