面向对象
面向对象
面向过程 & 面向对象
面向过程思想
- 步骤清晰简单,第一步做什么,第二步做什么。。。。
- 面对过程适合处理一些较为简单的问题
面向对象思想
- 物以类聚,分类的的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的戏界进行面向过程的思索。
- 面向对象适合处理复杂的问题,适合处理需要多人合作的问题!
总结
- 对于描述复杂的事物,为了从宏观上把握、从整体商合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理
什么是面向对象
- 面向对象编程的本质就是:一类的方式组织代码,以对象的阻止(封装)数据。
三大特性
- 封装
- 继承
- 多态
方法的调用
有无static的区别
有static为静态方法,可以用 类名.方法名直接调用
无static为非静态方法,只能先创建一个实例化对象,再用 对象.方法名调用
构造器
-
使用new关键字创建对象 快捷键:Alt+Enter
-
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用
-
类中的构造器也称构造方法,是在进行创建对象的时候必须调用的。而且构造器有以下两个特点:
- 必须和类的名字相同
- 必须没有返回值类型,也不能写void
-
new关键字的本质就是在调用构造方法
-
构造器作用就是初始化对象的值
-
注意:定义了有参构造之后,如果想使用无参构造,线是的定义一个无参的构造
-
快捷键:Alt+Insert
封装
-
该露的露,该藏的藏
- 我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用
-
封装的好处:
-
提高程序的安全性,保护数据
-
隐藏代码的实现细节
-
统一接口
-
系统可维护性增加了
public void setAge(int age){ this.age = age; } public int getAge(){ return age; }
-
继承
- 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模
- extends的意思是“扩展”,子类是是父类的扩展
- Java中类只有单继承,没有多继承
- 继承关系的两个类,一个为子类,一个为父类。子类继承父类,使用关键字extends表示
super关键字
- super注意点:
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
- super和this比较:
- 代表的对象不同:
- this:本身调用者这个对象
- super:代表父类对象的应用
- 前提不同:
- this:没有继承也可以使用
- super:只能在继承条件下才可以使用
- 构造方法不同:
- this():本类的构造
- super():父类的构造
- 代表的对象不同:
重写
子类的方法和父类的方法必须要一致,方法体不同
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大但不能缩小
-
抛出的异常范围可以被缩小,但不能扩大
-
为什么需要重写:
- 父类的功能子类不一定需要,或者不一定满足
多态
-
即同意方法可以根据发送对象的不同而采用多种不同的行为方式
-
一个对象的实际类型是确定的,但可以只想对象的引用的类型有很多
-
注意事项:
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系 若没有关系强行转换则会报错:类型转换异常 ClassCastException
- 存在条件:继承关系,方法需要重写,父类的引用指向子类对象
static关键字
-
加入static的变量即为静态变量,没加为非静态变量
private static int age;//可以直接调用 private double score;//必须先实例出对象,在调用
-
加入static的方法即为静态方法,没加为非静态方法
-
加入static的代码块即为静态代码块,没加为匿名代码块
package oop; public class Demo01 { { System.out.println("匿名代码块"); } static { System.out.println("静态代码块"); } public Demo01() { System.out.println("构造方法"); } public static void main(String[] args) { Demo01 d1 = new Demo01(); System.out.println("============================="); Demo01 d2 = new Demo01(); }
静态代码块在实例化对象后最先执行,只执行一次,然后为匿名代码块,最后再执行构造方法
结果:
静态代码块 匿名代码块 构造方法 ================================ 匿名代码块 构造方法
-
静态导入包
import static java.lang.Math.random;
抽象类
- 加入abstract变为抽象类
-
- 不能new这个抽象类,只能靠子类去实现它 起到约束作用
- 抽象类中可以写普通的方法
- 抽象方法必须在抽象类中
接口
- 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是。。。则必须能。。。。”的思想。
- 接口的本质是契约就像人的法律一样。制定好然后大家遵守
- 声明接口的关键字是interface
- 接口的作用:
- 约束作用
- 定义一些方法,让不同的人实现
- 在接口中,所有定义的方法都是抽象的 public abstract ,所有常量的定义都是静态的 public static final
- 接口不能被实例化,接口中没有构造方法
- implements可以实现多个接口
- 必须要重写接口中的方法