面向对象

对象与类

每个对象具有三个特点:对象的状态,对象的行为和对象的标识。

 对象的状态用来描述对象的基本特征。对象的行为用来描述对象的功能。对象的标识是指对象在内存中都有一个唯一的地址值用来和其他对象区分开来。类是一类事物的抽象,对象是具体的实现。

类(一类事物抽象成一个类型)-----模板/图纸-----class:
对象:根据图纸创造出来的一个个时间的实例-----new
1.创建类
2.创建类的属性(成员变量)
3.封装类的属性(成员变量)
4.提供get和set方法
5.提供一些本类的功能

创建对象

通过对象调用方法:

  1. 可以调用set方法修改私有属性的值
  2. 可以调用get方法获取私有属性的值
  3. 可以调用普通的方法执行对应的功能

联系面向对象

package cn.susu.oop;
/**本类用于联系面向对象* 分析手机这一类事物---通过类来描述** 属性:品牌 价格 颜色 尺寸 * 功能:打电话 发微信  看直播*/
/**在一个java文件中可以写多个class,但是被public修饰的只能又有一个* 而且这个公共类的名字必须与文件名保持一致*/
public class TestCreateClass {//2.创建程序的入口函数public static void main(String[] args) {//3.在main()中通过new关键字来创建对应类的对象Phone p = new Phone();//4.通过.来完成对象功能的调用p.call();//调用打电话的方法p.message();//调用发短信的方法p.video();//调用看视频的方法//5.通过.来查看对象的属性值System.out.println(p.color);System.out.println(p.brand);System.out.println(p.price);System.out.println(p.size);//6.创建第二个对象Phone p2 = new Phone();//8.给p2对象设置属性值p2.color="深海蓝";p2.brand="香蕉";p2.price=8888888;p2.size=100;//7.通过p2,查看对象的属性值System.out.println(p2.color);System.out.println(p2.brand);System.out.println(p2.price);System.out.println(p2.size);//9.通过p2对象,调用模板里的功能p2.call();p2.message();p2.video();}
}
/**通过class关键字描述一个类型* 类是一类事物的抽象,值抽象的规定这一类事物的特征与行为* */
//1.创建手机类
class Phone{//特征,属性------用类的成员变量来描述  位置-----类里方法外String brand;//品牌double price;//价格double size;//尺寸String color;//颜色//行为(功能)--类的方法来描述--修饰符 返回值类型 方法名(参数列表){方法体}public void call() {System.out.println("正在打电话");}public void message() {System.out.println("假装正在发微信");}public void video() {System.out.println("我么正在看直播");}
}

面向对象的三大特征:

  1. 封装: 把相关的数据封装成一个“类”组件
  2. 继承: 是子类自动共享父类属性和方法,这是类之间的一种关系
  3. 多态: 增强软件的灵活性和重用性

封装

面向过程过程中每个细节都需要开发者去了解,封装改变这样方式,它先进行建模,把名称创建对象,设置它的属性(代表这个事物的特点)和方法(表现 一些动作)
把生活中的物品抽象成java中的对象
对象为了简单,有些内容对外暴露,有些内容隐藏。隐藏就体现了封装。
例子:手机
1)对外暴露:屏幕、键盘、话筒、耳机、充电器
2)隐藏:怎么通讯,运行app

怎么封装?

 通过private关键字来实现封装

封装以后怎么办?

 1)对于成员变量:提供相对应的get/set方法2)对于方法:在本类中调用该方法

封装的好处
1)把不让外界知道的信息就隐藏起来,外部无法操作。代码比较安全,外部无法操作。
2)代码只能内部处理。当代码修改,所有调用地方都要随之改变,这种结构紧耦合。如果代码只能内部修改,修改后,外部丝毫不影响,这种结构松耦合。程序能实现松耦合就松耦合。封装就实现松耦合结构。内部修改不影响其他代码。
3)封装后,里面程序实现细节,对应调用者来说不关心,只关心如何使用。把复杂问题变简单。

package cn.susu.oop;
/**本类适用于测试封装*/
public class TestPrivate {public static void main(String[] args) {//4.创建学生类对象--通过new关键字Student s= new Student();//5.初步测试学生类对象sSystem.out.println(s.name);//可以通过“.”来调用s对象的name属性,查看它的值s.study();//可以通过“.”来调用s对象的study方法//6.给s对象的属性赋值s.name="狗蛋";s.sno = 666;//s.subject="拆家学";//加private后报错The field Student.subject is not visible//7.查看赋值以后的属性值System.out.println(s.name);System.out.println(s.sno);//System.out.println(s.subject);//10.通过student类中提供的get/set方法操作属性值subjects.setSubject("拆家学");System.out.println(s.getSubject());}
}
//1.通过class关键字创建学生类--用来描述学生这一类型--属性+行为
/**封装:通过private关键字(权限修饰符)来修饰成员变量/成员方法* 被修饰的成员就实现了私有化,访问权限只能在本类中访问* */
class Student{//2.定义属性--成员变量String name;//姓名int sno;//学号private String subject;//科目/**8.对外提供的公共的属性值设置方式*/public void setSubject(String s) {subject = s;//将用户设置的变量值s赋值给subject}/**9.对外提供的公共的属性值查看方式*/public String getSubject() {return subject;}//3.定义行为--方法public void study() {System.out.println("正在看书~~~");/**可以在公共的方法中调用私有方法*/eat();//调用私有方法eat}private void eat() {System.out.println("干饭人是人上人");}
}

构造方法、构造代码块、局部代码块

普通方法的格式:修饰符 返回值类型 方法名(参数列表){方法体}
构造方法的格式:修饰符 方法名(参数列表){方法体}----构造方法名与类名相同

构造方法: 与类同名,且没有返回值类型的用来创建对象的方法

       作用:  创建对象(实例化)并且赋值(初始化)(赋值可选)特点:   方法名与类名相同,且没有返回值类型执行时机:   创建对象时会自动触发构造函数注意: 1.默认会创建无参构造,当new Person()时会自动触发此无参构造如果自定义了含参构造,默认的无参构造会被覆盖,注意要手动添加2.构造方法也存在重载的现象(全参构造一般用于给对象的全属性赋值):*方法的重载:在同一个类中,方法名相同且参数列表不同的*
package cn.susu.oop;
/**本类用于测试构造方法*/
public class TestConstructor {//4.创建程序入口函数main()public static void main(String[] args) {//5.创建Person类的对象p,并进行测试/**1.每次new(实例化)对象时会自动调用构造方法*/Person P=new Person();System.out.println(P.address);System.out.println(P.age);System.out.println(P.name);P.eat();Person P2=new Person("尼古拉斯赵四");System.out.println(P2.name);P2.eat(); Person p3 =new Person("猪八戒",18,"高老庄");System.out.println(p3.address);System.out.println(p3.age);System.out.println(p3.name)        }
}
//1.创建Person,用来描述人这一类型
class Person{//2.属性--创建成员变量String name;//姓名int age;//年龄String address;//地址//6.1创建无参构造方法--当new Person()时会触发public Person() {System.out.println("我是Person类的无参构造方法");}//6.2创建含有一个参数的含参构造public Person(String s) {System.out.println("我是Person类的含有1个参数的构造方法"+s);}//6.3创建全参构造--在当前类中定义了几个属性,就传几个参数//6.2创建含有一个参数的含参构造public Person(String n,int a,String addr) {name =n;//n是方法中的局部变量,name是成员变量,把用户传过来的参数n赋值给nameage =a;//a是方法中的局部变量,age是成员变量,把用户传过来的参数a赋值给ageaddress=addr;//addr是方法中的局部变量,address是成员变量,把用户传过来的参数addr赋值给addressSystem.out.println("我是Person类的全参构造方法");}//3.行为---创建方法/**方法的格式:修饰符 返回值类型 方法名(参数列表){方法体}*/public void eat() {System.out.println("干饭人干饭魂,干饭人是人上人");}}

构造代码块: 类里方法外用来提取构造方法共性功能的代码块

       位置:类里方法外作用:用于提取所有构造方法中的共性内容执行时机: 每次调用构造方法前都会调用构造代码块注意事项: 构造代码块优先于构造方法加载

局部代码块:

       位置: 在方法里面的代码块作用: 通常用于控制变量的作用范围,出了花括号就失效执行时机: 调用此代码块的方法时才会执行注意事项: 变量的作用范围越小越好,成员变量会存在线程安全的问题
package cn.susu.oop;
/**本类用于测试代码块*/
public class TestBlock {//5.创建入口函数public static void main(String[] args) {//6.创建对象进行测试/**每次创建对象时,都会执行一次构造代码块可构造方法* 并且构造代码块先于构造方法执行*/School s=new School();School s1= new School("皮皮虾");s.time();}}
//1.创建一个School类用于测试
class School{//2.定义属性--成员变量String name;//7.定义构造代码块{name = "希望小学";System.out.println("我是构造代码块");}//3.1创建无参构造方法public School() {//      name = "希望小学";System.out.println("我是无参构造"+name);}//3.2创建全参构造方法public School(String S) {name = S;System.out.println("我是全参构造"+name);}//4.创建普通方法public void time() {//8.创建局部代码块{int i=999;System.out.println(i);}//报错:因为超出了变量i的使用范围,是不可以被引用的变量//System.out.println(i);//i cannot be resolved to a variableSystem.out.println("下课了");}}

总结:
1.当创建对象时,程序会自动调用构造方法, 但是如果有构造代码块,会先去执行构造代码块,再执行 构造方法
2。当通过对象调用方法时,会执行方法中的功能,如果方法中有局部代码块,就会执行此局部代码快
3。执行顺序:构造代码块–>构造方法–>局部代码块
[前提:调用方法(如果方法中有局部代码块,局部代码块才会执行)]
4。构造方法的功能:创建对象(实例化)并且赋值(初始化)
5。构造代码块的功能:用于提取构造方法的共性
6。局部代码块的功能:控制变量的作用范围

面向对象--封装、构造方法相关推荐

  1. php面向对象分页,PHP基于面向对象封装的分页类示例

    本文实例讲述了php基于面向对象封装的分页类.分享给大家供大家参考,具体如下: class page { protected $num;//每页显示条数 protected $total;//总记录数 ...

  2. JS面向对象一:MVC的面向对象封装

    JS面向对象一:MVC的面向对象封装 MDNjavascript面向对象 面向对象(Object-Oriented) 面向对象里面向的意思是以...为主,面向对象编程既以对象为主的编程. 面向对象的一 ...

  3. 面向对象-封装、继承、多态

    面向对象-封装.继承.多态 面向对象-封装 一.封装: private 数据类型 _名字;   --成员变量 public 默认一致 名字 属性 {  get{ return _名字; }  set{ ...

  4. javascript对XMLHttpRequest异步请求的面向对象封装

    对XMLHttpRequest异步请求的面向对象封装,需要的朋友可以参考下 function CallBackObject() { this.XmlHttp = this.GetHttpObject( ...

  5. 封装+构造方法小例子

    public class FirstDemo { /**     * 封装+构造方法小例子     */   //   private String student;   private String ...

  6. python封装举例_Python面向对象封装操作案例详解

    本文实例讲述了Python面向对象封装操作.分享给大家供大家参考,具体如下: 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 ...

  7. Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day09[面向对象(封装.继承.多态).重写.私有权限] Python基础day ...

  8. python-面向对象-05_面向对象封装案例 II

    面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象, ...

  9. Python之 面向对象封装案例

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 ...

  10. python 面向对象的封装_Python面向对象封装操作案例详解

    本文实例讲述了Python面向对象封装操作.分享给大家供大家参考,具体如下: 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 ―― 将 属性 和 ...

最新文章

  1. 信息系统项目管理师笔记(信息系统篇)第一讲
  2. python输入一个正整数n求下列算式的值_C语言编写程序:输入一个正整数x和一个正整数n,求下列算式的值。,C语言 编写一个程序,输入一个正整数,求出它是几位数。...
  3. Android Framework常用工具及LOG调试方法
  4. 本科、硕士、博士,究竟有何区别?
  5. 使用PostgREST的RestAPI操作之相关软件生态系统
  6. 测试或运维工作过程中最常用的几个linux命令?
  7. SSM框架笔记07:初探Spring——采用XML配置文件与注解方式
  8. kodi资源_kodi.tv让你从此看4K节目可以更多选择
  9. Bitmap简单使用及简单解析
  10. [论文阅读] Deep Transformers For Fast Small Intestine Grounding In Capsule Endoscope Video
  11. 装饰博客全攻略(如何在博客首页或博客中插入图片、音乐、视频等)
  12. photorec_如何在Linux / Ubuntu中使用PhotoRec恢复已删除的文件
  13. 习题9.38 查找字符串中的数字、字母
  14. SAE J1939协议(二)
  15. 熊出没机器人光头强_《熊出没》五大兵器,天才威与光头强的战斗机器人谁更厉害?...
  16. 三角肌前束(02):哑铃交替前举
  17. VS2010 中修改项目名称
  18. android刷礼物动画demo,GiftSurfaceView 直播间送礼物动画
  19. Hibernate4.3.1搭建Log4J日志环境
  20. 在apache和php安装之后进行连接配置,

热门文章

  1. 【牛腩】DELETE 语句与 REFERENCE 约束“FK_news_category“冲突。该冲突发生于数据库“newssystem“,表“dbo.news“, column ‘caId‘
  2. 视频发微信文件过大怎么办大于200m视频发送微信?
  3. 什么是Precision和Recall和FPR和TPR?
  4. ROC、Precision、Recall、TPR、FPR理解
  5. 红米3s运行linux,红米3S3X|RROS-V7.0|安卓9.0|最强大的自定_最新最全的红米3S/3XROM刷机包下载、刷机教...
  6. html文件损坏怎么恢复,如何修复损坏Word文档恢复受损文档中的文字
  7. 【前端-IE兼容】Win10和Win11使用Edge调试前端兼容IE6、IE7、IE8、IE9、IE10、IE11问题
  8. 把树莓派系统语言恢复为英语
  9. Unity游戏开发:开放世界地形关卡
  10. 听红楼 第十八回 隔珠帘父女勉忠勤 搦湘管姊弟裁题咏