5_Java对象
面向对象编程
对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。
面向对象编程(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();父类的构造 |
方法重写
重写都是方法的重写,和属性无关
父类的引用指向了子类
- 前提:需要有继承关系,子类重写父类的方法
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但不能缩小(public>Protected>Default>private)
- 抛出的异常:范围可以缩小但不能扩大
重写,子类的方法和父类必须要一致,方法体不同
- 重写原因:父类的功能子类不一定需要或者不一定满足
快捷键“alt + insert;Override”
多态
- 多态是方法的多态,属性没有多态
- 父类和子类有联系(类型转换异常,ClassCastException)
- 存在条件:继承关系、方法需要重写、父类引用指向子类对象
instanceof
x instanceof y能否编译通过取决于二者之间是否存在父子关系
- 父类引用指向子类的对象
- 把子类转换为父类,向上转型
- 把父类转换为子类,向下转型。需要强制转换,可能会丢失一些方法
- 方便方法的调用,减少重复的代码
抽象类
单继承,接口可以多继承。
abstract修饰符可以用来修饰方法也可以修饰类,修饰方法(类),该方法(类)就是抽象方法(类)
抽象类中可以没有抽象方法,但是由抽象方法的类一定要声明为抽象类。
抽象类不能使用new关键字来创建对象,它是用来让子类继承的。
抽象方法只有方法的声明,没有方法的实现,它是用来让子类实现的。
子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类。
接口(interface)
普通类 | 抽象类 | 接口 |
---|---|---|
只有具体实现 | 具体实现和规范(抽象方法)都有 | 只有规范,自己无法写方法 |
- 接口就是规范。定义的一组规则,体现了现实世界中“如果你是…则必须能…”的思想。
- 接口的本质是契约,就像法律一样,制定好后大家都遵守。
- 接口中的所有定义都是抽象的(public abstract)。
- 类可以实现接口(implement 接口)。
- 实现接口的类,需要重写接口中的方法。
- 利用接口可以实现多继承。
内部类
就是在一个类的内部定义一个类
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
异常处理机制
关键字:try、catch、finally、throw、throws
最新文章
- Access denied for user 'root'@'localhost' (using password:YES)
- infobright 导入 导出
- SQL Server临界点游戏——为什么非聚集索引被忽略!
- 麒麟OS剽窃
- SQLlite(WebSQL)如何排序并分页查询(SQLlite语法)
- c# 远程回收IIS应用池
- POJ 1905 Expanding Rods 二分答案几何
- grails框架中在使用domain的save方法保存时保存不成功
- Git之路——Git的使用
- MYSQL 表分区的 3 方法
- Scala从零开始:使用Intellij IDEA写hello world
- 快学Scala-第二章 控制结构和函数
- gitlab+jenkins持续集成(一)
- axios中的this指向问题
- 【Python入门只需20分钟】从安装到数据抓取、存储原来这么简单
- MySql cmd下的学习笔记 —— 引擎和事务(engine,transaction)
- ROS开发与常用命令
- python advanced programming ( II )
- python爬虫requests过程中添加headers
- C++结构变量数据对齐问题