面向对象
对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统,但是,具体到微观操作,仍然需要面向过程的思路去处理
OOP
Object-Oriented Programming
本质
以类的方式组织代码,以对象的方式组织(封装)数据
三大特性
封装,多态,继承
方法
静态方法
和类一起加载的
非静态方法
类实例化之后,才存在
封装
高内聚,低耦合:类的内部数据操作细节自己完成,不允许外部干涉;仅暴露少量的方法给外部使用
封装(数据的隐藏):通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,称为信息隐藏
好处
- 提高程序的安全性,保护数据
- 隐藏代码实现细节
- 统一接口
- 系统可维护性增加了
记住
属性私有:get/set
继承
对某一批类的抽象
类只有单继承,没有多继承
私有(private)无法继承
idea里快捷键
ctrl+h:打开继承树
注意:
- super调用父类的构造方法,必须放在构造方法的第一行
- super必须只能出现在子类的方法或构造方法中
- super和this不能同时调用构造方法
重写
需要有需求关系,子类重写父类的方法
要求
- 方法名必须相同
- 参数列表必须相同,方法体不同
- 修饰符:范围可以扩大,但不能缩小
- 可能抛出异常:可以被缩小,但不能扩大
都是方法的重写,和属性无关
重写只跟非静态方法有关
子类重写了父类的方法,执行子类的方法
多态
父类的引用指向子类
对象能执行哪些方法,主要看左边的类型
//Person->Student
Student s1 = new Student();
//s1可以执行Student类里的所有方法,包括继承过来的方法
Person s2 = new Student();
//s2只能执行Person里的所有方法,不能调用Student里独有的方法,但是当方法被Student重写后,执行Student里的方法
Person s3 = new Person();
//s3执行Person里的所有方法,就算方法被重写了,也能执行Person里的方法
注意:
- 多态也是方法的多态,属性没有多态
- 父类和子类,有联系的才有多态
- 存在条件:继承关系,方法需要重写,父类引用指向子类对象
一个对象的实际类型是确定的,但是指向对象的引用的类型可以很多
Instanceof
X instanceof Y
// X,Y存在父子关系则编译通过
子类转父类,可能丢失自己本来的一些方法
Static
static{
//静态代码块,只执行一次
}
{
//匿名代码块
}
静态导入包
import static java.lang.Math.random;
public class Demo3_Static {
public static void main(String[] args) {
System.out.println(Math.random());
System.out.println(random());
}
}
抽象类
抽象方法:只有方法名,没有方法体
一个类,如果想继承抽象类,就要实现抽象类里的所有抽象方法,除非这个类也是抽象类
- 抽象类不能New,只能通过子类实现方法
- 抽象类中可以写普通方法
- 抽象方法必须在抽象类中
减少代码,提高开发效率
接口
只有规范!不能写具体方法
可以多继承
接口中的所有方法都是public abstract
所有属性都是public static final
内部类
在一个类的内部再定义一个类
可以获得外部类的私有属性
浙公网安备 33010602011771号