面向对象
面向对象&面向过程
属性+方法 = 类
⚠️面向过程:打开冰箱,放进大象,关闭冰箱;
⚠️面向对象:手工耿造了个专门放大象的工具,找到这个工具,直接放冰箱里就好了,怎么放的?要不要开门?怎么开门的?我不管啦,手工耿.工具即可。
这里需要注意,并不是啥都要找工具或者其他帮助来解决问题,比如把可乐放进冰箱这类简单的工程,直接放进去更简单,造轮子反而很麻烦,直接自己处理放进去就叫面向过程。
⚠️综上:如果需要多人协助,比较复杂麻烦,那就找轮子,别人造好的轮子拿过来用,这就是工具类的好处,面向对象的便捷,前提是你会找轮子。
面向对象的本质
面向对象本质:以类的方式组织代码,以对象的方式组织(封装)数据。
抽象
抽象:将具有共同属性的部分剥离出来,即抽出比较同类,像的那部分;这个个人理解,切勿当真,稍后解释。
抽象出类,类里面造轮子就是方法
类里面固定2项东西,属性和方法
⚠️比如person类,属性是人名,年龄等,抽象的共有的,方法是吃饭,修车等。
类实例化后可以使用方法。
方法
1、方法的定义:
- 修饰符 static
- 返回值类型
- break:跳出switch,结束循环;return 结束方法
- 方法名
- 参数列表(参数类型 参数名);…可变量参数
- 异常抛出 throws
public class Demo01 {
public static void main(String[] args) {
}
public String sayHello(){
return "Hello i";//return 表示方法结束,且要求返回值类型与方法上的类型一致
}
public void nothing1(){
return ;//没有返回值
}
}
2、方法的调用
- 静态方法
- 非静态方法
- 形参和实参
- 值传递和引用传递
- this关键字,调用方法所在的类的实例,就不需要new实例化了,好像是1.8之后不需要this关键字了。新特性吧可能。
构造器
啥事构造器?
构造器又叫构造方法,就是特殊的方法,用来初始化对象的;
构造方法的样式和方法差不多,没有返回值,没有方法体而已,但要求方法名等于类名
构造器就是一个没有返回值的空方法,创建类的时候默认有一个构造器,如下图:
构造器也可以自己写,比如想写一个有参构造器,如上图,这就叫重载;
三大特性
封装
代码中的数据需要封装,只开口接受数据等
高内聚、低耦合
尽量暴露少量的东西给外部使用
属性私有,get/set
比如属性:private 私有的属性;需要使用get/set提供private修饰的属性可使用的方法;
⚠️那么set/get的意义是什么呢?是为了在get/set方法里加一些封装的方法,比如下图:
封装总结
封装的好处
- 提高程序安全性,保护数据;比如增加一些数据的判断啊,规范啊
- 隐藏代码的实现细节;
- 统一借口;
- 提高系统可维护性
继承
字面意思,继承父辈的一些东西。
⚠️子类是父类的扩展,如下图
⚠️继承是类和类之间的关系
子类继承父类的全部public方法和全部public属性
属性的修饰符有:
- public 公共的
- protected 受保护的
- default 默认的
- private 私有的
⚠️所有的类追踪溯源都是object类,且不需要写extends Object
⚠️java中是单继承,每个子类都有直接的一个父类,虽然父类可以有多个子类。
super|this
this.本类的属性或者方法;
super.父类的属性或者方法;
super调用父类的构造方法,必须写在第一行,super();即可;
super只能出现在子类的方法中,或者构造方法中;
super 和 this不能通知调用构造方法;
重写
⚠️重写是方法的重写,重载是相同方法不同参数的重载,方法体不同;
⚠️重写必须具有继承关系之间的,子类重写父类的方法,参数列表一致;
⚠️修饰符:范围可以扩大不能缩小,public>Protected>Default>private
⚠️抛出的异常,可以被缩小但不能扩大
⚠️为啥需要重写?
父类的功能子类不一定需要,或者不一定满足;
子类类似于私人定制
静态方法只能被继承,不能被重写
即父类的非静态的public方法才能被子类重写
/这里的子类B重写了父类A的test方法,所以实际类型是B的a调用的是B类的方法,即重写的方法,一旦重写就是子类的方法,除非是子类独有的,a将无法调用,或者要经过特殊处理才能调用。
除非你这里new A();可以调用父类A的test方法,否则只能调用子类的方法,即子类一旦重写了方法,调用的就是子类
但是如果是子类特有的方法,这里的a将无法调用重写的方法。/
多态
水的形态有多种,对象的形态也有多种。
1、多态是方法的多态
2、子类和父类的关系转换,将父类强制类型转换成子类的,如果失败可能抛出的异常是ClassCastException
3、多态存在的前提条件:继承关系,方法被重写;
关键字 instanceof
instanceof
1、父类引用指向子类的对象;
2、把父类转换成子类,向上转型;
3、把父类转换为子类,向下转型,即强制转换;
4、方便方法的调用,减少重复的代码
总结
好抽象,抽象是一种编程思想,下节继续!