什么是面向对象

面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象(万物皆对象)。
面向对象本质就是基于面向过程的!

什么是面向过程? 代表语言就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. 面向对象类与对象的关系

    1.面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能.行为 面向对象:将功能封装进对象,强调具备了功能的对象 面向对象是基于面向过程的 面向过程例子: 把大象 ...

  2. 18、Java面向对象——类和对象的关系及应用、对象数组的应用

    目录 课前先导: 一.什么是类? 二.类的创建 三.什么是对象? 四.对象的创建.赋值:方法的调用 五.定义类和对象的三种方法 六.对象数组 七.来了,你们要的对象 课前先导: 在刚开始学习java的 ...

  3. Delphi面向对象学习随笔一:类与对象的关系

    Delphi面向对象学习随笔一:类与对象的关系 作者:巴哈姆特 http://www.cnpack.org (转载请注明出处并保持完整) 工作几年了,总想做点总结,于是有了这篇东西,叫随笔吧呵     ...

  4. 学习java的第十三天,回顾方法的定义及调用,以及面向对象构造器、类与对象的关系等基础

    一.方法的定义 在前面的学习中,以及学习过了方法的定义,下面再进行回顾一下加深印象,因为后续面向对象都需要用到这些基础知识的! 主要是注意以下几点: 修饰符 返回类型 break:跳出switch,结 ...

  5. 面向对象---类与对象

    1 面向对象思想 1.1 面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,以对象为基础完成各种操作,强调的是对象.它是基于面向过程的. 这里的对象泛指现实中一切事 ...

  6. C++学习笔记:(一)面向对象 类与对象

    目录 1.面向对象的概念 2.类与对象 2.1 类的定义格式 2.2 对象的定义与使用 2.3 构造函数和析构函数 2.4 内存的动态分配 2.5 对象数组和对象指针 2.6 函数参数的传递机制 2. ...

  7. 面向对象——类和对象

    一.面向对象的概念 面向对象是一种符合人类思维习惯的编程思想.现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系.在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系 ...

  8. 7.0_[Java 面向对象]-类和对象

    ################################################## 目录 面向对象扫盲 万物皆对象 分类思想 对象的属性与方法/实例的特征和行为 如何在 Java 中 ...

  9. java面向对象-类和对象

    Java面向对象笔记 文章目录 Java面向对象笔记 java面向对象 类和对象 什么是类 定义 创建和使用 公式 构造方法 什么是构造方 怎么定义和使用构造方法 实列 This关键字 什么是成员变量 ...

最新文章

  1. MTD NANDFLASH驱动相关知识介绍
  2. mysql设置edit_可以使用mysql自己带的config edit
  3. 企业网络推广浅析网站优化哪些设置会影响蜘蛛的爬取?
  4. 洛谷P1388 算式
  5. springboot redis token_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验
  6. Python gensim库word2vec 基本用法
  7. python import _ssl_如何在python 2.7.6中导入_ssl?
  8. 男性玩家占78.8%、90后玩家占近50%、最多人选择中国风链游……《2019链游玩家需求调研报告》重磅发布!...
  9. 修改手游服务器端数据库,手游服务端框架之配置与玩家数据库设计
  10. 视频转换gif动图 - 在线gif制作工具
  11. linux上热编译react,reactos终于被成功编译通过
  12. Linux 修改DNS配置
  13. 透过细节看日本(转)
  14. 处理器的计算能力如何计算
  15. 7-4 使用递归输出杨辉三角形 (18 分)输出杨辉三角形,用户输入一个正整数n,输出n行的直角三角形的杨辉三角。要求使用递归函数实现
  16. 将两张图片拼接成一张图片
  17. oracle备份提示12560,做standby 数据库时,出现ORA-12560 错误:
  18. Jeff Dean长文展望:2021年后,机器学习领域的五大潜力趋势!
  19. 2004年高考数学压轴题(利用对数齐次化或主元法解决)
  20. 【报告分享】2021小红书食饮品牌研究报告-艺恩(附下载)

热门文章

  1. 《Excel 职场手册:260招菜鸟变达人》一第 18 招 怎样插入符号
  2. Android 报错处理:xxx is translated here but not found in default locale
  3. [Mini Research]关于参与优先股和非参与优先股
  4. 西雅图最暖的创业公司
  5. 索引(index)是什么
  6. 如何给博客园添加访问统计
  7. 网易笔试--游历魔法王国
  8. Comviva的MobiLytix™ IRIS被评为年度最佳“创新型电信解决方案”
  9. start.S:88: Error: invalid constant (61f) after fixup
  10. 微信小程序通过Webview打开外部网站