Day10 面向对象 、类和对象的关系
什么是面向对象
面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象(万物皆对象)。
面向对象本质就是基于面向过程的!
什么是面向过程? 代表语言就C语言
面向过程的思想:(亲力亲为的)
1)拿到一个需求,分析步骤
2)代码实现, 中间完成代码中的逻辑判断....
3)写完之后在测试!
比如:
键盘录入三个数据,比较三个数据中最大值(方法完成)
1)需要借助于jdk提供的Scanner来进行键盘录入
(整个过程录入细节-->面向对象)
2)定义比较三个数据中最大值的方法
2.1) 两个明确
明确返回值类型 :int
明确参数类型: 三个参数,都是int
2.2)完成方法的业务逻辑
要么是分步骤三元运算符实现
要么直接if...else...嵌套实现
3)main方法中调用getMax(实际参数列表); 返回结果输出;
面向对象的思想特点(不是面向对象特征)
1)更符号我们生活中的思想行为习惯
2)让复杂的事情简单化
3)我们从执行者变成了指挥者!
面向对象的三大特征:封装,继承,多态!
面向对象设计原则?
就是不断的创建对象,使用对象,指挥对象做事情!
比如:
Scanenr类:键盘录入
可以不断的创建键盘录入对象,不断的去使用这个scanner对象
帮助我们完成录入的其他类型数据!
类和对象的关系
相辅相成
类和事物:一一对应的
类:---描述一组事物(泛指)的实行和行为的
xxx事物
属性有哪些
行为有哪些对象:是描述具体的事物
通过代码体现 类名 对象名 = new 类名() ;
对象名访问成员变量
对象名调用成员方法
Java中最基本的单元----"类"
什么是类呢?
类---就是描述现实世界事物的属性和行为的统称!
类,是描述一组事物的属性和行为的集合! (官方的概念)现实世界事物---->学生,老师,运动员,教练,军人,工人....猫,狗....等等
举例:
学生事物
属性:姓名,年龄,性别,身高,爱好... ----对应 类中的成员变量
行为:学生的行为---吃,睡,玩,学习等等 ----对应的类中的成员方法
public void study(){}
成员方法:今天写成员方法的时候,去掉static(之前怎么写还怎么写)
public 返回类型 方法名(参数类型1 变量名1,参数类型2 变量名2....){
有返回值类型需要return
没有返回值类型,返回值类型void ,此处直接输出结果;
}
需要使用代码体现出来现实世界的事物//class 类名(见名知意){ }//定义学生类class Student{//成员变量----就是描述现实世界事物的属性(类中,方法外定义的变量)String name; //姓名int age ;//年龄String gender ; //性别//..//成员方法---行为public void study(){//学习System.out.println("我们正在学习JavaSE之面向对象...") ;}//睡觉public String sleep(){return "学生正在睡觉" ;}//吃饭...public void eat(){System.out.println("学生正在吃饭...") ;}}
上面的描述"学生事物"----属性和行为
分别使用代码体现出---学生事物("泛指") ---定义了一个Student类
我们并没有给出具体的学生是谁?----->具体的事物才能体现出来他具体的姓名,年龄,性别
具体的学生信息
张三
20
男
具体的学生事物----使用代码体现出来---就是 创建对象
类名 对象名 = new 类名() ; 固定格式
对象名.成员变量(属性) = 赋值; 注意数据类型
对象名.成员方法(行为) ; //有返回值,返回结果;没有返回值,直接单独调用
Student student = new Student() ;
null 0
System.out.println("学生 姓名是:"+student.name+",年龄是"+student.age+",
性别是:"+student.gender) ; null
student.name = "高圆圆" ; //
student.age = 42 ;
student.gender = "女" ;
System.out.println("学生 姓名是:"+student.name+",年龄是"+student.age+",
性别是:"+student.gender) ;
student.study() ;
String result = student. sleep() ;
System.out.println(result) ;
student.eat();
/*
需求:
描述学生事物,
学生事物的属性:姓名,年龄,性别
学生事物的行为:主要学习,吃饭,睡觉...
分析:
1)定义一个学生类--描述学生事物
成员变量: 类中方法外
属性:姓名,年龄,性别
成员方法:去掉了static
study(),sleep(),eat()
2)然后在测试类StudentDemo中进行测试
*///学生类 class Student{//成员变量(类中方法外)--事物的属性(都是小写,满足小驼峰命名法即可)(一一对应的)//姓名,年龄,性别String name; //姓名int age ; //年龄String gender ;//性别//成员方法:去掉了staticpublic void study(String content){//参数为:学生学习的"课程名称"System.out.println("学生正在学习"+content) ;}//吃饭public void eat(String str){System.out.println("学生正在"+str) ;}}//测试类 class StudentDemo{public static void main(String[] args){//测试学生类---描述具体的事物//创建学生对象--描述具体的事物//格式:类名 对象名 = new 类名() ;Student student = new Student() ; //对象名student:访问成员变量System.out.println(student.name+"----"+student.age+"---"+student.gender) ; //null----0---nullSystem.out.println("----------------------------") ;//给成员变量赋值student.name = "高圆圆" ;student.age = 42 ;student.gender = "女" ;System.out.println(student.name+"----"+student.age+"---"+student.gender) ;student.study("JavaSE");student.eat("吃鸡") ;} }
/*
需要使用面向对象的编程方式:来描述手机事物
手机事物
属性:品牌 ,价格 ,机身颜色,机身内存..
行为:打电话,发短信,玩游戏,学习...
分析:
定义一个手机类----来描述现实世界事物的"手机事物"
成员变量---属性:
品牌: brand;
价格 price ;
颜色 color ;
内存 memory ;
行为:
callPhone(String name),name:某个人的名称
sendMsg(String name), 给name 打发短信
playGame():玩游戏
study():学习
*///定义一个手机类 class Phone{//成员变量---类中方法外定义的变量String brand ; //品牌int price ; //价格 String color ; //颜色String memory ; //机身内存//成员方法:去掉static///callPhone(String name),name:某个人的名称public void callPhone(String name){System.out.println("使用手机正在给"+name+"打电话") ;} //sendMsg(String name), 给name 打发短信public void sendMsg(String name){System.out.println("使用手机给"+name+"发短信") ;}// playGame():玩游戏public void playGame(String gameName){System.out.println("使用手机玩"+gameName);}}//手机类的测试类 class PhoneTest{public static void main(String[] args){//手机类定义完毕,需要创建具体的事物来描述具体的手机//创建一个手机类对象Phone phone = new Phone() ;//Phone@6d06d69c 地址值System.out.println(phone) ;System.out.println(phone.brand+"---"+phone.price+"---"+phone.color+"---"+phone.memory) ;//赋值phone.brand = "华为mate30pro" ;phone.price = 6799 ;phone.color = "翡翠绿" ;phone.memory = "128G" ;System.out.println(phone.brand+"---"+phone.price+"---"+phone.color+"---"+phone.memory) ;//打电话phone.callPhone("高圆圆") ;//发短信://public void sendMsg(String name)phone.sendMsg("张佳宁") ;//public void playGame(String gameName)phone.playGame("csgo") ;} }
private关键字
/**
* private关键字的特点:
*
* private访问的权限:范围是最小的:仅限当前类中!
* 被private修饰的成员变量/成员方法,只能在当前类中访问
* 外界类不能直接访问!
* 但是,可以间接的通过公共访问 来访问!
*///定义一个类 class Demo{//公共的成员变量public int num ;private int num2 = 200;//private修饰的//私有的成员方法,也只能在本来访问private void method(){System.out.println("method Demo...");}//公共成员方法public void function(){method(); //公共访问间接访问私有本来私有方法System.out.println("=====================");System.out.println("function Demo");}//公共成员方法public void show(){System.out.println(num);System.out.println(num2);//num2私有的} }//测试类 public class PrivateDemo {public static void main(String[] args) {//访问Demo类中的num变量?Demo d = new Demo() ;d.num = 20 ;System.out.println(d.num);//System.out.println(d.num2);//此处访问不到System.out.println("--------------------------");d.show(); //公共访问// d.method() ;//method方法是私有的,无法访问的!d.function();} }
/**
* 需要描述一个学生事物,学生事物--有姓名,和年龄两个属性
* 写一个测试类,测试学生的信息
*
*
* 通过上面的测试,发现问题,我给学生的年龄赋值一个负数,不合适!
*
* 需要改进这个程序:
* 可以定义成员方法:为了校验这个年龄的合法范围
* 如果它在<0 或者>150 ,提示"非法数据"
* 否则的话,就可以将变量赋值给成员变量age
*
* 这个方法定义在Student类中还是定义在测试类中?
* Student类中
*
*
* 虽然定义了,但是在测试中的时候可以不用!依然会输出非法数据 年龄负数!
*
* 所以Java中有技术----->封装!
*
* 封装:就是将一个事物中的属性私有化,(对外私有),----
* 说白了,代码中体现 将一个类中的所有的成员变量加入关键字private
* 保证了数据安全性,对外提供的公共的访问方法来访问,并不能直接访问!
*
* 公共方法:
* setXXX()getXXX()方法----称为"setter and Getter"
*
*
*///定义一个学生类 class Student{//成员变量(属性)String name ; //姓名 默认nullprivate int age ; //年龄 默认0//定义一个校验年龄的成员方法public void setAge(int a){if(a<0 || a> 150){System.out.println("对不起,数据非法!");}else{age = a ;}}//单独定义一个成员方法,输出学生的信息public void showStudent(){System.out.println("学生的姓名是:"+name+",年龄是:"+age);}}//测试类 public class StudentTest {public static void main(String[] args) {//测试学生//正常数据//类名 对象名 = new 类名() ;Student student = new Student() ;student.name = "高圆圆" ;// student.age = 42 ; //age已经私有化了,不能访问了!//访问成员方student.showStudent();System.out.println("---------------------") ;//在创建一个新的学生Student student2 = new Student() ;student2.name = "赵又廷" ;//student.age = -45 ;//改进 这种数据被更改了负数,不安全!student2.setAge(-45); //现在调用刚才的方法student2 .showStudent();System.out.println("---------------------------") ;//创建一个学生,不用你的方法,依然输出的有非法数据!Student student3 = new Student() ;student3.name = "张三丰" ;// student3.age = -100 ;//以后这些数据都是来源于数据库的有效数据!student3.showStudent();} }
Day10 面向对象 、类和对象的关系相关推荐
- 面向对象类与对象的关系
1.面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能.行为 面向对象:将功能封装进对象,强调具备了功能的对象 面向对象是基于面向过程的 面向过程例子: 把大象 ...
- 18、Java面向对象——类和对象的关系及应用、对象数组的应用
目录 课前先导: 一.什么是类? 二.类的创建 三.什么是对象? 四.对象的创建.赋值:方法的调用 五.定义类和对象的三种方法 六.对象数组 七.来了,你们要的对象 课前先导: 在刚开始学习java的 ...
- Delphi面向对象学习随笔一:类与对象的关系
Delphi面向对象学习随笔一:类与对象的关系 作者:巴哈姆特 http://www.cnpack.org (转载请注明出处并保持完整) 工作几年了,总想做点总结,于是有了这篇东西,叫随笔吧呵 ...
- 学习java的第十三天,回顾方法的定义及调用,以及面向对象构造器、类与对象的关系等基础
一.方法的定义 在前面的学习中,以及学习过了方法的定义,下面再进行回顾一下加深印象,因为后续面向对象都需要用到这些基础知识的! 主要是注意以下几点: 修饰符 返回类型 break:跳出switch,结 ...
- 面向对象---类与对象
1 面向对象思想 1.1 面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,以对象为基础完成各种操作,强调的是对象.它是基于面向过程的. 这里的对象泛指现实中一切事 ...
- C++学习笔记:(一)面向对象 类与对象
目录 1.面向对象的概念 2.类与对象 2.1 类的定义格式 2.2 对象的定义与使用 2.3 构造函数和析构函数 2.4 内存的动态分配 2.5 对象数组和对象指针 2.6 函数参数的传递机制 2. ...
- 面向对象——类和对象
一.面向对象的概念 面向对象是一种符合人类思维习惯的编程思想.现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系.在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系 ...
- 7.0_[Java 面向对象]-类和对象
################################################## 目录 面向对象扫盲 万物皆对象 分类思想 对象的属性与方法/实例的特征和行为 如何在 Java 中 ...
- java面向对象-类和对象
Java面向对象笔记 文章目录 Java面向对象笔记 java面向对象 类和对象 什么是类 定义 创建和使用 公式 构造方法 什么是构造方 怎么定义和使用构造方法 实列 This关键字 什么是成员变量 ...
最新文章
- MTD NANDFLASH驱动相关知识介绍
- mysql设置edit_可以使用mysql自己带的config edit
- 企业网络推广浅析网站优化哪些设置会影响蜘蛛的爬取?
- 洛谷P1388 算式
- springboot redis token_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验
- Python gensim库word2vec 基本用法
- python import _ssl_如何在python 2.7.6中导入_ssl?
- 男性玩家占78.8%、90后玩家占近50%、最多人选择中国风链游……《2019链游玩家需求调研报告》重磅发布!...
- 修改手游服务器端数据库,手游服务端框架之配置与玩家数据库设计
- 视频转换gif动图 - 在线gif制作工具
- linux上热编译react,reactos终于被成功编译通过
- Linux 修改DNS配置
- 透过细节看日本(转)
- 处理器的计算能力如何计算
- 7-4 使用递归输出杨辉三角形 (18 分)输出杨辉三角形,用户输入一个正整数n,输出n行的直角三角形的杨辉三角。要求使用递归函数实现
- 将两张图片拼接成一张图片
- oracle备份提示12560,做standby 数据库时,出现ORA-12560 错误:
- Jeff Dean长文展望:2021年后,机器学习领域的五大潜力趋势!
- 2004年高考数学压轴题(利用对数齐次化或主元法解决)
- 【报告分享】2021小红书食饮品牌研究报告-艺恩(附下载)
热门文章
- 《Excel 职场手册:260招菜鸟变达人》一第 18 招 怎样插入符号
- Android 报错处理:xxx is translated here but not found in default locale
- [Mini Research]关于参与优先股和非参与优先股
- 西雅图最暖的创业公司
- 索引(index)是什么
- 如何给博客园添加访问统计
- 网易笔试--游历魔法王国
- Comviva的MobiLytix™ IRIS被评为年度最佳“创新型电信解决方案”
- start.S:88: Error: invalid constant (61f) after fixup
- 微信小程序通过Webview打开外部网站