4.类,方法,对象

1.1.2. 面向对象程序设计的三大特征

1.1.2.1. 封装

面向对象编程核心思想之一就是将数据和对数据的操作封装在一起,形成一般的概念,比如类的概念。

1.1.2.2. 继承

继承体现了一种先进的编程模式。子类可以继承父类的属性和方法。

1.1.2.3. 多态

多态是面向对象编程的又一重要特征,是编写出易维护,易扩展程序的保障。

1.1.3. 类与对象的概念

1.1.3.1.类

是一个模板或蓝图,它用来定义对象的数据域是什么以及方法是做什么的对象是类的一个实例(instance)。可以用一个类创建多个实例。创建实例的过程称为实例化(instantiation)。

对象实例(instance)是一个概念,对象是类实例化的结果。

类和对象是抽象和具体的关系。比如汽车属于交通工具类,问界 M7 是交通工具类的一个实例

1.1.3.2.对象 

对象的两方面的特征

  • 状态:描述对象的静态特征
  • 行为:描述对象的动态特征

一辆汽车

  • 状态描述:生产厂家、颜色、出厂年份、价格等
  • 行为描述:启动、加速、转弯和停止等

一名员工:

  • 状态描述:姓名、年龄、工资
  • 行为描述:说话、工作、计算工资等
1.1.3.3. 消息和方法

对象和对象之间的联系是通过消息传递的,一个对象发送消息包含 3 方面的内容:接收消息的对象,接收对象采用的方法、以及方法的参数。

 

1.2.1. 类的定义

类(class)是一种抽象数据类型,类是构成Java程序的最基本的要素,一个Java项目应由若干类构成。

1.2.1.1. 类声明

类的定义包含两部分:类的声明和类的实现(类的主体)。主体部分包含声明数据成员定义成员方法。具体格式如下:

[public][abstract|final]class ClassName [extends SuperClass] [implements InterfaceList]{
	//1.成员变量的定义
	//2.构造方法的定义
	//3.成员方法的定义
	...
}

说明:

  1. 类的修饰符

类的访问修饰符可以是 public 或者缺省。若类用 public 修饰,则该类称为公共类。公共类可以被任何包的类使用。如果不加 public 修饰符,类只能被同一包的其他类使用。如果类使用 abstract 修饰符,则该类为抽象类。如果类使用 final 修饰,指明该类为最终类。

  1. extends SuperClass

如果一个类需要继承某个类使用 extends 指明该类的父类,SuperClass 为父类名,即定义了该类继承了哪个类。如果定义类的时候没有指明所继承的父类,则它自动继承自 Object 类

  1. implements InterfaceList

如果定义的类需要实现接口,则使用 implements InterfaceList 选项。一个类可以同时实现一个或一个以上的接口,如果实现多个接口,则接口名中间以逗号分开。

  1. 类体

类声明结束后是一对大括号{},用大括号括起来的部分称为类体。类体中通常包括 三部分内容:构造方法、成员变量、成员方法。其中构造方法用于创建类实例;成员变量定义对象状态;成员方法定义对象行为

public class Employee {
    //3个成员变量的定义
    String name;
    int age;
    double salary;

    //无参数构造方法
    public Employee() {
    }

    //一个实例方法
    public void sayHello() {
        System.out.println("My name is " + name);
    }

    //另一个实例方法
    public double computeSalary(int hours, double rate) {
        double totalSalary = salary + hours * rate;
        return totalSalary;
    }
}
1.2.1.2. 成员变量的定义

成员变量的声明格式是:

[public|private|protected][static][final] type variableName[=value];

注意:

用 protected 修饰的变量为保护变量,可以被同一个包中的类或子类访问;

没有使用访问修饰符的变量,只能被同一个包中的类访问;

用 private 修饰的变量称为私有变量,只能被同一个类的方法访问。 

实例变量和静态变量。如果变量用 static 修饰,则该变量称为静态变量,又称为类变量。没有用 static 修饰的变量称为实例变量

使用 final 修饰的变量称为最终变量,又称为常量。常量可以在声明的时候赋值,也可以在后面赋初值。一旦为其赋值,其值不能更改。

 

1.2.1.3. 构造方法的定义

构造方法又称为构造器(constructor),是类的一种特殊的方法。Java 中的每个类都有构造方法,它的作用是创建对象并初始化对象的状态。下面的代码定义了一个不带参数的构造方法。

public Employee();//不带参数的构造方法,方法体为空	
1.2.1.4. 成员方法的定义

方法用来实现对象的动态特征,Java 的方法必须定义在类体内,不能定义在类体外。

成员方法的定义包括方法的声明方法体的定义,一般格式如下:

[修饰符] returnType methodName([paramList]){
	//方法体
}

 1.2.2. 创建和使用对象

一般先根据需求设计(创建)类(Employee),然后在另一个类(EmployeeDemo) 中,创建该Employee 类的成员并调用Employee 类的方法。

现在创建一个Employee 类的对象,实例化,并调用该实例的变量和方法。

public class EmployeeDemo {
    public static void main(String[] args) {
		//声明并创建一个Employee对象
		Employee employee;
        employee = new Employee();
		//访问对象的成员(赋值)
        employee.name = "张三";
        employee.age = 28;
        employee.salary = 5000.00;
		//访问对象的成员(取值)
        System.out.println("姓名=" + employee.name);
        System.out.println("年龄=" + employee.age);
        System.out.println("工资=" + employee.salary);
		//调用对象的方法
        employee.sayHello();
    }
}
/*
姓名=张三
年龄=28
工资=5000.0
My name is 张三
*/
1.2.2.1. 用 new 创建对象

为了使用对象,一般要声明一个对象名,即声明该对象的引用(reference),然后使用 new 运算符调用类的构造方法创建对象。对象声明格式如下:

1.可以同时声明多个同类型的对象名,其中用逗号分隔

Employee emp1,emp2;

 2.可以将对象的声明和创建使用一个语句完成

Employee employee;
employee=new Employee();
//(1)+(2)等价于(4)
Employee employee=new Employee();

3.若对象仅在创建处使用,也可以不声明引用名,如下面语句直接创建一个Employee对象,然后调用其sayHello()方法

new Employee().sayHello();
1.2.2.2. 对象的使用 

创建一个对象引用后,可以通过点号运算符(.)来访问对象的成员变量和调用对象的成员方法

employee.name = "张三";
employee.sayHello();
1.2.2.3. 对象引用赋值 

对于对象的赋值,赋值时将该对象的引用(地址)赋值给变量

Employee employee1,employee2;
employee1 = new Employee();
employee2=employee1;	//employee1的引用赋值给employee2
public class Employee {
   String name;
    public static void main(String[] args){
       Employee employee1,employee2;
       employee1 = new Employee();
       employee2 = employee1;
       employee1.name = "张三";
       employee2.name = "李四";
       System.out.println("employee1.name=" + employee1.name);
       System.out.println("employee2.name=" + employee2.name);
    
 }
}
/*
employee1.name=李四
employee2.name=李四
*/

注意:employee1 和 employee2 指向同一个对象后不管后加入什么值两个对象最终都指向最后一个值 。

 

1.2.3. 构造方法

每个类都有构造方法(constructor),构造方法用来创建类的对象或实例。构造方法也有名称、参数和方法体。

构造方法与普通方法的区别是:

  1. 构造方法的名称必须与类名相同
  2. 构造方法不能有返回值,也不能返回void
  3. 构造方法必须在创建对象时用new运算符调用

构造方法定义的格式为:

[public|protected|private] ClassName([param list]) {
	 // 方法体
}

注意:

  1. public、protected和private为构造方法的访问修饰符,它用来决定哪些类可以使用该构造方法创建对象
  2. 构造方法名必须与类名相同
  3. 构造方法可以带有参数
  4. 构造方法可以不唯一

 

构造方法主要作用是创建对象并初始化类的成员变量。对类的成员变量,若声明时和在构造方法都没有初始化,新建对象的成员变量值都被赋予默认值。

对于不同类型的成员变量,其默认值整理如下:

  • 整型数据的默认值是0
  • 浮点型数据默认值是0.0
  • 字符型数据默认值是’\u0000’
  • 布尔型数据默认值是false
  • 引用类型数据默认值是null

例如,假设在Employee类定义了一个构造方法Employee (String name, int age, double salary),现在要定义一个无参数的构造方法,可以在下面的构造方法中调用该构造方法。

public Employee(){
  this("张三", 28, 5000);
}

Java语言规定:

1、在构造方法中调用另一个构造方法,则this语句必须是第一条语句

2、this只能用在实例方法和构造方法中,不能用在static方法中

1.3.1. 静态变量

静态变量和实例变量的区别是:

实例变量具有自己的内存区域,因此这些实例变量是不同的,通常使用实例变量名的方式来访问;

静态变量共享同一个内存区域,每个对象对静态变量的修改都会影响到其他对象,通常使用类名+静态变量名的方式访问。

public class Person {
    String name;
    int age;
    static String schoolName;
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
    public void say(){
        System.out.println("我是"+this.name+",今年"+this.age+",来自"+this.schoolName);
    }
    public void setSchoolName(String schoolName){
        this.schoolName=schoolName;
    }
}
public class PersonDemo {
    public static void main(String[] args){
        Person.schoolName="A大学";
        Person p1=new Person("张三",18);
        Person p2=new Person("李四",28);
        p1.setSchoolName("B大学");
        p2.say();			//output
    }
}

另外,static与final一起使用来定义类常量。例如,Java类库中的Math类中就定义了两个类常量:

public static final double E = 2.718281828459045 ;              
public static final double PI = 3.141592653589793 ; 

 可以通过类名直接使用这些常量:

System.out.println("面积=" + Math.PI * 10 * 10);

1.3.2. 静态方法

静态方法只能访问静态变量,不允许访问实例变量,静态方法不允许使用 thissuper 等关键字。通常,通过类名+静态方法名的方式来访问静态方法。

1.2.4.2. 方法重载

一个类中定义多个同名的方法,这称为方法重载(overloading),实现方法重载,要求同名的方法。

  1. 要么参数个数不同
  2. 要么参数类型不同
  3. 仅返回值不同不能区分重载的方法
public void display (int a){
	System.out.println("a = "+a);	
}
public void display (double d){
   System.out.println("d = "+d);	
}	
public void display(){
   System.out.println("无参数方法");	
}	
public void display(int a,int b){
   System.out.println("a = "+a+",b = "+b);	
}
 public static void main(String[] args){
      OverloadDemo obj = new OverloadDemo();
      obj.display();
      obj.display(10);
      obj.display(50,60);
      obj.display(100.0);
}

 

 

 

 

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Novartis诺华制药社招综合能力性格动机问卷入职测评笔试题库答案及包过助攻

【华东同舟求职】由资深各行业从业者建立的一站式人才服务网络平台,现阶段目标是“提升全市场各行业岗位信息的流动性和透明度”。我们接受众多行业机构的直接委托发布,并尽力通过各种方法搜寻高价值岗位信息。事实上,我们以发现不为人知的优…

HQChart实战教程73-仿tradingview指标MACD

HQChart实战教程73-仿tradingview指标MACD MACD![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/84d180b5620940f6b9fe08c6f10eb0f3.png)麦语法脚本实心MACD指标脚本效果 空心MACD指标脚本效果图 自定义指标添加到系统指标里HQChart插件源码地址 MACD tradingview中…

多模态LLM 跨越语言与视觉的边界

一、引言 在数字时代的浪潮中,我们被由语言和视觉等多种模态构成的信息海洋所包围。人类大脑以其卓越的多模态上下文理解能力,在日常任务中游刃有余。然而,在人工智能领域,如何将这种能力赋予机器,尤其是如何在语言模…

HarmoneyOS星河版 安装和启动

一、下载和安装DevEco Studio 官网链接:OpenAtom OpenHarmony 1.1 找到对应的操作系统进行下载 创建安装Harmony的文件夹: 1.2 下载后进行安装 1.3 分别安装Node、Ohpm、SDK 分别安装Node、Ohpm和SDK 二、.创建一个新项目并运行 2.1 选择[OpenHarmon…

复旦发布开源版本的EMO,只需输入一段音频和一张照片就可以让人物开始说话。

之前和大家介绍过阿里的EMO,用户只需要提供一张照片和一段任意音频文件,EMO即可生成会说话唱歌的AI视频。最长时间可达1分30秒左右。感兴趣的小伙伴可以点击下面链接阅读。 近日,复旦发布了一个开源版本的 EMO。 通过输入音频让面部照片开始…

【MySQL基础随缘更系列】AB复制

文章目录 mysql AB复制实战一、mysql AB复制二、AB复制原理三、master服务器设置3.1、安装mysql并启动3.2、关闭防火墙,selinux3.3、设置时间服务器3.4、修改配置文件 设置server-idN3.5、创建slave连接master的账号,用于取SQL语句 四、slave设置4.3、修改配置文件 …

数据可视化在智慧水利中的关键应用

数据可视化是如何在智慧水利中应用的?在现代水利管理中,面对复杂的水资源数据和动态变化的水文情况,数据可视化技术通过将繁杂的数据转化为直观、易理解的图表和图形,极大地提升了水利管理的效率和决策的科学性。智慧水利利用数据…

植物ATAC-seq文献集锦(四)——生物和非生物胁迫篇

ATAC-seq在植物研究领域的应用我们已经介绍3期了,最后一期我们聚焦ATAC-seq技术在生物和非生物胁迫方向的应用案例。 植物ATAC-seq文献集锦(一)——基因组篇 植物ATAC-seq文献集锦(二)——生长发育篇 植物ATAC-s…

自动采集软件||自动采集主流电商商品详情SKU数据价格功能实现||电商API接口的应用

实现自动化淘宝商品数据采集的方法有多种,一种常见的方式是利用网络 Python 技术。您可以编写一个网络 Python程序,通过模拟浏览器发送请求,获取淘宝商品页面的数据,并对数据进行解析和提取,最终存储到数据库或文件中。…

Android Compose 文本输入框TextField使用详解

一、 TextField介绍 TextField 允许用户输入和修改文本,也就是文本输入框。 TextField 分为三种: TextField是默认样式OutlinedTextField 是轮廓样式版本BasicTextField 允许用户通过硬件或软件键盘修改文本,但不提供提示或占位符等装饰&a…

车企高管组团“出道”,汽车营销已经Next level了?

汽车进入了“卷”老板、“卷”高管的时代! 谁能想到,雷军凭一己之力,在一定程度上重塑了汽车的竞争策略。价格战之外,车市又开启了流量之战。 云略曾在《雷军20天吸粉500w!……》一文中,提到继雷军之后&…

【问题记录】Ubuntu提示: “E: 软件包 gcc 没有可安装候选“

Ubuntu提示: "E: 软件包 gcc 没有可安装候选" 一,问题现象二,问题原因&解决方法 一,问题现象 在虚拟机Ubuntu中进行安装gcc命令时报错:“E: 软件包 gcc 没有可安装候选”: 二,问题原因&解决方法 …

树莓派 Thonny使用

在python中新建了虚拟环境,需要Thonny使用虚拟环境,在python executable中选中虚拟环境路径下的python3即可

银河麒麟4.0.2安装带有opengl的Qt5.12.9

银河麒麟4.0.2下载地址:银河麒麟-银河麒麟(云桌面系统)-银河麒麟最新版下载v4.0.2-92下载站 VirtualBox:https://www.virtualbox.org/wiki/Downloads qt下载:Index of /archive/qt/5.12/5.12.9 1安装VirtualBox:网上教材比较多 1)安装完后安…

苹果的后来者居上策略:靠隐私保护打脸微软

01.苹果与微软相比更注重用户隐私 我一直是Windows的忠实用户,但微软疯狂地将人工智能融入一切,让我开始觉得应该咬咬牙换成Mac。 自小我几乎只用Windows电脑,所以我对MacOS一直不太适应。虽然Windows 11有其缺点,但总的来说&am…

车载ADAS面试题,零基础也能看得懂!

周一来刷刷ADAS相关的面试题吧!相信看完这些题目,你会对ADAS有个更清晰的认识,即使你是零基础也可以轻松明白! 1、描述 ADAS 系统的基本组成和功能 答案:高级驾驶辅助系统(ADAS)是一套融合了多种…

如何通过Appium连接真机调试

1、打开appium,点击启动appium服务器(如图1) 2、appium启动成功后,点击放大镜启动检查会话(如图2) 3、填写真机设备信息和APP的package、activity,点击启动会话(如图3) 4、打开运行A…

过拟合与正则化

Location Beijing 过拟合 对于一个模型 A A A,解向量空间为 θ \theta θ,误差函数用式1表示 J ( θ ) J a c c [ y θ ( x ) − y ] 2 (1) J(\theta)J_{acc}[y_\theta(x)-y]^2\tag{1} J(θ)Jacc​[yθ​(x)−y]2(1) 首先我们考虑用模型 A A A拟合下…

整合第三方技术-整合JUnit

黑马程序员Spring Boot2 文章目录 名称:SpringBootTest类型:测试类注解位置:测试类定义上方作用:设置JUnit加载的SpringBoot启动类范例:

算法题解记录29+++全排列(百日筑基)

一、题目描述 题目难度:中等 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示…