面向对象编程

对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。

  • 面向对象编程(Object-Oriented Programming, OOP)

  • OOP本质:以类的方式组织代码,以对象的组织(封装)数据。

  • 抽象

  • 三大特性

    • 封装
    • 继承
    • 多态
  • 从认识角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象。

  • 从代码运行角度考虑是现有类后有对象。类是对象的模板。

创建与初始化对象

  • 使用new关键字创建对象(除了会分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类型中构造器的调用)

  • 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下特点:

    • 必须和类的名字相同

    • 必须没有返回类型,也不能写void

    构造器作用:

    • 使用new关键字本质是在调用构造器
    • 初始化对象的值

​ 注意点:定义有参构造器之后,如果想使用无参构造,需要定义一个无参构造

生成构造器快捷键:"alt + insert"

封装

“高内聚,低耦合”

“属性私有(private), get/set”

public class stu{
//属性私有
private String name;
private int id;
private char sex;
}
//提供一些可以操作这个属性的方法(public的get/set方法)
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}

快捷键:"alt + insert"(我的没有)

继承

  • 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
  • extends的意思是“扩展”。子类是父类的扩展。
  • Java中类只有单继承,没有多继承!一个儿子只有一个爸爸
  • 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等 。
  • 继承关系的俩个类,为子类(派生类)和父类(基类)。子类继承父类,用关键字extends表示。
  • 子类和父类之间,从意义上讲应该具有“is a”的关系。
  • 私有的(private)无法被继承。
  • 在Java中,所有的类都默认直接或间接继承Object类

super

  • super调用父类的构造方法,必须在构造方法的第一个
  • super必须只能出现在子类的方法或构造方法中
  • super和this不能同时调用构造方法

super与this区别

代表的对象 前提 构造方法
this 本身调用者这个对象 没有继承也可以使用 this();本类的构造
super 代表父类对象的引用 只能在继承条件下用 super();父类的构造

方法重写

重写都是方法的重写,和属性无关

父类的引用指向了子类

  • 前提:需要有继承关系,子类重写父类的方法
  1. 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符:范围可以扩大但不能缩小(public>Protected>Default>private)
  4. 抛出的异常:范围可以缩小但不能扩大

重写,子类的方法和父类必须要一致,方法体不同

  • 重写原因:父类的功能子类不一定需要或者不一定满足

快捷键“alt + insert;Override”

多态

  1. 多态是方法的多态,属性没有多态
  2. 父类和子类有联系(类型转换异常,ClassCastException)
  3. 存在条件:继承关系、方法需要重写、父类引用指向子类对象

instanceof

x instanceof y能否编译通过取决于二者之间是否存在父子关系

  • 父类引用指向子类的对象
  • 把子类转换为父类,向上转型
  • 把父类转换为子类,向下转型。需要强制转换,可能会丢失一些方法
  • 方便方法的调用,减少重复的代码

抽象类

  • 单继承,接口可以多继承。

  • abstract修饰符可以用来修饰方法也可以修饰类,修饰方法(类),该方法(类)就是抽象方法(类)

  • 抽象类中可以没有抽象方法,但是由抽象方法的类一定要声明为抽象类。

  • 抽象类不能使用new关键字来创建对象,它是用来让子类继承的。

  • 抽象方法只有方法的声明,没有方法的实现,它是用来让子类实现的。

  • 子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类。

接口(interface)

普通类 抽象类 接口
只有具体实现 具体实现和规范(抽象方法)都有 只有规范,自己无法写方法
  • 接口就是规范。定义的一组规则,体现了现实世界中“如果你是…则必须能…”的思想。
  • 接口的本质是契约,就像法律一样,制定好后大家都遵守。
  • 接口中的所有定义都是抽象的(public abstract)。
  • 类可以实现接口(implement 接口)。
  • 实现接口的类,需要重写接口中的方法。
  • 利用接口可以实现多继承。

内部类

就是在一个类的内部定义一个类

  1. 成员内部类
  2. 静态内部类
  3. 局部内部类
  4. 匿名内部类

异常处理机制

关键字:try、catch、finally、throw、throws

5_Java对象的更多相关文章

  1. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  2. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  3. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  4. Asp.Net WebApi核心对象解析(下篇)

    在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...

  5. JS核心系列:浅谈原型对象和原型链

    在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象(Object)和函数对象(Function). 一般而言,通过new Function产生的对象是函数对象,其他对 ...

  6. Chrome出了个小bug:论如何在Chrome下劫持原生只读对象

    Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...

  7. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

  8. ASP.NET内置对象的总结

    1. Response对象可形象的称之为响应对象,用于将数据从服务器发送回浏览器. 实例源码:链接: http://pan.baidu.com/s/1dDCKQ8x 密码: ihq0  2. Requ ...

  9. ADO.NET对象的详解

    1. Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能 ...

  10. 对Castle Windsor的Resolve方法的解析时new对象的探讨

    依赖注入框架Castle Windsor从容器里解析一个实例时(也就是调用Resolve方法),是通过调用待解析对象的构造函数new一个对象并返回,那么问题是:它是调用哪个构造函数呢? 无参的构造函数 ...

随机推荐

  1. 源码下载teb

    git clone https://github.com/rst-tu-dortmund/teb_local_planner.git git checkout <ros版本分支> git ...

  2. j-link "the connected j-link is defective"问题的解决

    出现这个原因是 J-link和J-link的驱动不匹配,比如J-link的固件太老,J-link驱动太新.因此要解决的话,要不就是换不同版本的J-link驱动,要不就是换J-Link或升级J-link ...

  3. B端业务中仓库标签打印系统设计方案

    需求背景: 仓库在给客户货物打包途中需要在包裹上贴标签,在客户比较多且标签样式多样化的前提下,给仓库人员带来了工作量,为了节约仓库人员工作流程时间,公司开发了一套标签管理系统: 前提条件:选择专属打印 ...

  4. 使用 UnoCSS shortcuts 简化 class

    UnoCSS 确实简化了不少样式书写.也降低了 CSS 打包体积,提升了样式使用率.但样式太多的话,class 也写得多,比较费眼.所幸,UnoCSS 提供了 shortcuts 来简化 class, ...

  5. Cesium之Quick Start

    1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库,使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,基于Apache2.0许可的开源程序,可以免费用于商业和非商业 ...

  6. Linux操作命令(三)1.more命令 2.less命令 3.head命令 4.tail命令

    1.more 命令 分页显示文本文件的内容 more 命令,功能类似 cat ,cat 命令是将整个文件的内容从上到下显示在屏幕上. more 命令会一页一页的显示,方便使用者逐页阅读,而最基本的指令 ...

  7. mysql查询重复的数据

    ---查询重复的数据 . UUID可以换成其他的需要去重的字段. 点击查看代码 select * FROM t_gzmx_reptile_receive_incre WHERE id NOT IN ( ...

  8. JMeter 常用的几种断言方法

    一.Jmeter 断言背景 在使用Jmeter进行性能测试或者接口自动化测试工作中,经常会用到的一个功能,就是断言.断言是在请求的返回层面增加一层判断机制.因为请求成功了,并不代表结果一定正确,因此需 ...

  9. Linux常用命令 转于WoW_Boom

    一.常用命令 1.进入到用户根目录cd ~ 或 cd 2.查看当前所在目录pwd 3.进入到itcast用户根目录cd ~itcast 4.返回到原来目录cd - 5.返回到上一级目录cd .. 6. ...

  10. Python elasticsearch 报错及解决方法

    1. ERROR: [1] bootstrap checks failed [1]: the default discovery settings are unsuitable for product ...