java学习笔记3--类与对象的基础

1、面向对象的程序设计方法概述

面向对象的程序设计

与结构化程序设计方法相比,更符合人类认识现实世界的思维方式,已成为程序设计的主流方向

涉及的主要概念:抽象、封装、继承、多态

对象

现实世界中:万物皆对象,都具有各自的属性,对外界都呈现各自的行为

程序中:一切都是对象,都具有标识 (identity), 属性和行为(方法),通过一个或多个变量来保存其状态,通过方法(method) 实现他的行为

将属性及行为相同或相似的对象归为一类,类可以看成是对象的抽象,代表了此类对象所具有的共有属性和行为,在面向对象的程序设计中,每一个对象都属于某个特定的类

抽象

忽略问题中与当前目标无关的方面,以便更充分地注意与当前目标有关的方面;计算机软件开发中所使用的抽象有:过程抽象和数据抽象

过程抽象:

–-将整个系统的功能划分为若干部分,强调功能完成的过程和步骤,而隐藏其具体的实现

–-任何一个明确定义的功能操作都可被看作单个的实体,尽管这个操作实际上可能由一系列更低级的操作来完成

–-基于过程抽象的两个标准程序设计技术过程:分解、递归技术

数据抽象

–-将需要处理的数据和这些数据上的操作结合在一起,抽象成不同的抽象数据类型

–-每个抽象数据类型既包含了数据,也包含了针对这些数据的操作

–-相对于过程抽象,数据抽象是更为合理的抽象方法

例:钟表

数据(属性)

int Hour;  int Minute;  int Second;

方法(行为)

SetTime();  ShowTime();

封装

  • 是一种信息隐蔽技术

  • 利用抽象数据类型将数据和基于数据的操作封装在一起

  • 用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的

  • 封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息来访问对象

继承

  • 是指新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为已有类的派生类(也称为子类)

  • 在继承过程中派生类继承了基类的特性,包括方法和实例变量

  • 派生类也可修改继承的方法或增加新的方法,使之更适合特殊的需要

  • 有助于解决软件的可重用性问题,使程序结构清晰,降低了编码和维护的工作量

PS:Java语言仅支持单继承

多态

  • 一个程序中同名的不同方法共存

  • 主要通过子类对父类方法的覆盖来实现

  • 不同类的对象可以响应同名的消息(方法) ,具体的实现方法却不同

  • 使语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序方法同名问题

2、类与对象

在程序中,对象是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(Class),一个类是对一类对象的描述。类是构造对象的模板,对象是类的具体实例

类的声明

声明形式:

[public] [abstract | final] class 类名称 [extends 父类名称] [implements 接口名称列表] { 

     变量成员声明及初始化;

       方法声明及方法体;

}

class:表明其后声明的是一个类。

extends:如果所声明的类是从某一父类派生而来,那么,父类的名字应写在extends之后

implements:l如果所声明的类要实现某些接口,那么,接口的名字应写在implements之后

修饰符:可以有多个,用来限定类的使用方式

public:表明此类为公有类

abstract:指明此类为抽象类

final:指明此类为终结类  

先看一个钟表类的例子:

public class Clock
{  // 成员变量int hour ;int minute ;int second ;// 成员方法public void setTime(int newH, int newM, int newS) {  hour = newH ;  minute = newM ;  second = news ;  }public void showTime() { System.out.println(hour + ":" + minute + ":" + second);}
} 

对象的声明

格式:  类名  变量名

例如:Clock是已经声明的类名,则下面语句声明的变量aclock将用于存储该类对象的引用:Clock  aclock;

声明一个引用变量时并没有对象生成

对象的创建

生成实例的格式:

  new <类名>()

 例如: aclock=new Clock()

其作用是:

在内存中为此对象分配内存空间

返回对象的引用(reference ,相当于对象的存储地址)

引用变量可以被赋以空值

例如:aclock=null;

数据成员

表示Java类的状态,声明数据成员必须给出变量名及其所属的类型,同时还可以指定其他特性。在一个类中成员变量名是唯一的,数据成员的类型可以是Java中任意的数据类型(简单类型,类,接口,数组)

分为实例变量和类变量

–声明格式

  [public | protected | private]

  [static][ final][transient] [volatile]

  变量数据类型  变量名1[=变量初值],

             变量名2[=变量初值], … ;

–格式说明

public、protected、private 为访问控制符

static指明这是一个静态成员变量

final指明变量的值不能被修改

transient指明变量是临时状态

volatile指明变量是一个共享变量

类变量,也称为静态变量,声明时需加static修饰符,不管类的对象有多少,类变量只存在一份,在整个类中只有一个值,类初始化的同时就被赋值

适用情况:

类中所有对象都相同的属性

经常需要共享的数据

系统中用到的一些常量值

例:对于一个圆类的所有对象,计算圆的面积时,都需用到π的值,可在Circle类的声明中增加一个类属性PI
public class Circle { static double PI = 3.14159265; int radius; 
}
public class ClassVariableTester { public static void main(String args[]) { Circle x = new Circle();  System.out.println(x.PI); System.out.println(Circle.PI); Circle.PI = 3.14; System.out.println(x.PI); System.out.println(Circle.PI); } 
}

执行结果:

3.14159265

3.14159265

3.14

3.14

final修饰符

实例变量和类变量都可被声明为final

final实例变量必须在每个构造方法结束之前赋初值,以保证使用之前会被初始化

final类变量必须在声明的同时初始化

类方法,也称为静态方法,表示类中对象的共有行为,声明时前面需加static修饰符,不能被声明为抽象的,类方法可以在不建立对象的情况下用类名直接调用,也可用类实例调用
//将摄氏温度(centigrade)转换成华氏温度(fahrenheit)
//转换公式为   fahrenheit = centigrade * 9 / 5 + 32
//除了摄氏温度值及公式中需要的常量值,此功能不依赖于具体的类实例的属性值,因此可声明为类方法
//转换方法centigradeToFahrenheit放在类Converter中
public class Converter { public static int centigradeToFahrenheit(int cent) { return (cent * 9 / 5 + 32);   }  
}
//方法调用
Converter.centigradeToFahrenheit(40);

get方法

功能是取得属性变量的值,get方法名以“get”开头,后面是实例变量的名字,一般具有以下格式:

public <fieldType> get<FieldName>() {

    return <fieldName>;

}

对于实例变量radius,声明其get方法如下:
public int getRadius(){return radius;
} 

set方法

功能是修改属性变量的值,set方法名以“set”开头,后面是实例变量的名字,一般具有以下格式:

public void set<FieldName>(<fieldType> <paramName>) {

    <fieldName> = <paramName>;

}

声明实例变量radius的set方法如下:
public void setRadius(int r){radius = r;
}

关键字this的使用

如果形式参数名与实例变量名相同,则需要在实例变量名之前加this关键字,否则系统会将实例变量当成形式参数。

在上面的set方法中,如果形式参数为radius,则需要在成员变量radius之前加上关键字this。代码如下:

public void setRadius(int radius){this.radius = radius;
}

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

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

相关文章

孟德尔随机化周报 (12.14)

欢迎报名2023年郑老师团队课程&#xff01; 郑老师科研统计培训&#xff0c;包括临床数据、公共数据分析课程等&#xff0c;欢迎报名 孟德尔随机化,Mendilian Randomization&#xff0c;简写为MR&#xff0c;是一种在流行病学领域应用广泛的一种实验设计方法&#xff0c;利用公…

android计算器弹窗,android实现简易计算器

本文实例为大家分享了android实现简易计算器展示的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下效果图&#xff1a;一、如图&#xff0c;首先布局计算器主页显示activity_main.xmlxmlns:tools"http://schemas.android.com/tools"android:layout_width&qu…

多选取值_机制砂如何控制MB值和石粉含量

随着环保政策的加强和河沙采挖禁令的收紧&#xff0c;机制砂逐渐成为建筑用砂的主流。但很多砂石厂生产设备落后、生产条件简陋、生产工艺不完善导致生产的机制砂品质低&#xff0c;质量不能满足高等级混凝土的要求。不仅卖不上价格&#xff0c;还浪费了矿石资源&#xff0c;挣…

python爬虫哪个选择器好用_Python网络爬虫四大选择器用法原理总结

前几天小编连续写了四篇关于Python选择器的文章&#xff0c;分别用正则表达式、BeautifulSoup、Xpath、CSS选择器分别抓取京东网的商品信息。今天小编来给大家总结一下这四个选择器&#xff0c;让大家更加深刻的理解和熟悉Python选择器。 一、正则表达式 正则表达式为我们提供了…

C++primer习题--第3章

【习题 2.11】 编写程序&#xff0c;要求用户输入两个数——底数&#xff08; base&#xff09;和指数&#xff08; exponent&#xff09;&#xff0c;输出底数的指数次方的结果。 #include <iostream> #include <math.h> #include <string> using namespace…

eclipse配置python开发环境_eclipse怎样搭建Python开发环境

eclipse通过pydev插件也是可以搭建出Python开发环境的。今天小编我就来给大家分享一下eclipse怎样搭建Python开发环境的经验哦。 工具/原料 电脑 eclipse Python pydev插件链接&#xff1a;https://pan.baidu.com/s/1VIK5H_ZbC6DsOlNwy2OwLw 密码&#xff1a;kg8a 方法/步骤 1 …

android光照传感器,详解 android 光线传感器 light sensor的使用

调用anroid的光线传感器使用。实现效果图&#xff1a;MainActivity.Javapackage hk.ust.cse.comp107x.ligthsensor;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import …

hive中实现行转列_漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)

全文由下面几个部分组成&#xff1a;先分享一下拉链表的用途、什么是拉链表。通过一些小的使用场景来对拉链表做近一步的阐释&#xff0c;以及拉链表和常用的切片表的区别。举一个具体的应用场景&#xff0c;来设计并实现一份拉链表&#xff0c;最后并通过一些例子说明如何使用…

算法导论:堆排序

堆 堆是一个数组&#xff0c;它可以被看成一个近似的完全二叉树&#xff0c;树上的每一个结点对应数组中的一个元素。除去最底层外&#xff0c;该树是完全充满的&#xff0c;而且从左到右填充。 用数组A表示堆&#xff0c;从数组第1个元素开始&#xff0c;数组中第i&#xff08…

python网址太长_【原创】分享一个自己用python写的长网址转短网址工具,给需要的你...

[Python] 纯文本查看 复制代码import requests import json from tkinter import * class Get_url_short(): def __init__(self): self.source 2540340328 self.url https://api.t.sina.com.cn/short_url/shorten.json? def get_short(self): try: url_long self.tk_url_lo…

扩展坞可以把手机投到显示器吗_解锁4K 60Hz毕亚兹USB Type-C扩展坞体验

现在很多白领办公、学生上网课都会使用到笔记本电脑&#xff0c;尤其是近两年的轻薄本&#xff0c;为了追求轻量化&#xff0c;砍掉了原本很多的接口&#xff0c;转而使用Type-C来代替&#xff0c;从而导致接驳外设的时候非常不方便。特别是那种只给了一个USB标准接口的电脑&am…

Android view.settran,Android RecyclerView从入门到玩坏

目录前言基础使用分隔线点击监听搭配CardView更丰富的条目增删条目快速添加视图让RecyclerView支持复杂视图最后前言RecyclerView在Android界面开发当中是很重要的, 那掌握它也是很必要的. 但是有些时候会觉得它很厚重, 这里就从RecyclerView的基础一直说到扩展, 让你把Recycle…

python提取英文单词 每行显示一个_使用python对文件中的单词进行提取

由于需要使用一个纯单词组成的文件&#xff0c;在网上下载到了一个存放单词的文件&#xff0c;但是里面有中文的解释&#xff0c;那就需要做一下提取了。 文本的形式如下&#xff1a;所见即所得&#xff0c;这个文本是有规律的&#xff0c;每个单词为一行&#xff0c;紧接着下一…

微服务feignclient_搞微服务用阿里开源的 Nacos 真香啊

本文适合有 Java 基础知识的人群本文作者&#xff1a;HelloGitHub-秦人HelloGitHub 推出的《讲解开源项目》系列&#xff0c;今天给大家带来一款开源 Java 版可以实现动态服务发现&#xff0c;配置和服务管理平台——Nacos&#xff0c;它是阿里巴巴团队推出的&#xff0c;符合国…

linux shell脚本备份mysql数据库

#!/bin/sh# 备份数据库# Mysql 用户名密码 MYSQL_USERroot MYSQL_PASSroot BACKUP_DIR/data/backup/mysql DATA_DIR/data/backup/dbdata# 查询mysql中所有数据库名字 SQL_STRING"SELECT SCHEMA_NAME AS db FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN (my…

华为mate40搭载鸿蒙,华为mate40搭载鸿蒙还是EMUI11,答案来了

原标题&#xff1a;华为mate40搭载鸿蒙还是EMUI11&#xff0c;答案来了今年秋季苹果要发布首款5G版iPhone手机iPhone12&#xff0c;搭载A14处理器首发iOS14系统。而华为也要发布新款旗舰手机华为mate40系列手机&#xff0c;搭载华为麒麟1020处理器&#xff0c;首发EMUI11系统。…

称重管理系统如何修改重量_无人值守称重系统硬件配置和作用

1. 视频监控抓拍系统软件配合设摄像头在保存数据的同时抓拍&#xff0c;防止车辆或者人为的舞弊行为2. 红外定位在地磅否的两侧各安装一对红外对射&#xff0c;通过信号线连接到开关&#xff0c;当红外的光束被阻挡时&#xff0c;红外定位系统将自动发出警告&#xff0c;禁止称…

在建工程直接费用化_威县垃圾发电在建项目被罚后续:现已整改

新京报讯(记者 李大伟)3月11日&#xff0c;针对此前因环保问题被处罚一事&#xff0c;威县垃圾发电在建项目(下称威县项目)的项目方宁夏电力建设工程公司相关负责人罗中辉表示&#xff1a;目前&#xff0c;该项目已整改完成。“所有道路上的浮土已彻底清扫&#xff0c;所有的裸…

文件批量处理器Android,GFileBat 2012(文件批量处理器)V1.1 正式版

GFileBat 2012(文件批量处理器)V1.1 正式版批量处理文件的强大综合工具&#xff0c;包括十几种方式批量重命名文件&#xff0c;批量修改文件内容、属性、时间、快捷方式信息、音乐标签&#xff0c;批量创建文件和文件夹、智能归档&#xff0c;批量分割和合并文件&#xff0c;批…

centos 断电重启后,文件系统损坏修复

为什么80%的码农都做不了架构师&#xff1f;>>> centos 断电重启后&#xff0c;由于文件系统损坏&#xff0c;无法正常开机&#xff0c;常常出现“an error occurred during the file system check” 提示&#xff0c;就是说系统文件损坏啦&#xff0c;这时候要用f…