什么是面向对象
- 面向对象的本质就是:以类的方式组织代码,以对象的方式封装数据
- 抽象
- 三大特性
1. 封装
2. 继承
3. 多态
- 从认知论的角度看是先有对象,然后才有类。类是从对象中抽象出来的某种特征。
- 从代码运行的角度看,先有类然后在有对象。类是对象的模板。
方法的调用
- 静态方法
直接可以使用类名.方法名调用。 - 非静态方法
不可以直接调用,必须通过new实例化出一个对象才可以调用。
值传递和引用传递
值传递:值传递不会改变实际参数的值。
引用传递:引用传递可以修改对象的具体参数。
创建对象和初始化对象
使用new创建对象
使用new关键词创建对象时,不仅会给对象分配内存空间,同时也会给对象进行默认的初始化以及构造器的调用。
类中的构造器又叫做构造方法,在创建对象时必须调用构造器,构造器有如下两个特点:
1. 构造器的名字必须和类名相同。
2. 构造器没有返回值,也不能写void。
3. 当创建了一个有参构造后,必须将无参构造显示定义出来。
封装
- 提高了程序的安全性。
- 隐藏了代码细节。
- 统一接口。
- 使可维护性提高。
继承
- 当父类属性为私有时无法被继承。
- Java只能单继承,不能多继承
- java类中属性等级分为:
1. public(所有人都可访问)。
2. protected(类内和包内可访问)。
3. default(包内可访问)。
4. private(类内可访问)。 - super使用注意点:
1. super调用父类的构造器,必须位于构造方法的第一位。
2. super不能和this一起调用构造方法。
3. super必须只能出现在子类的方法或者构造方法中。
- super和this比较:
1. 代表对象不同
this:本身调用者这个对象。
super:父类对象的引用。
2. 条件不同
this:不用继承也可调用。
super:必须继承才可调用。
3. 构造方法
this:本类构造。
super:父类构造。
重写
要求:
1. 需要有继承关系,子类重写父类方法。
2. 参数列表必须相同。
3. 重写后修饰符范围可以扩大不能缩小。(public>protected>default>private)
4. 抛出异常可以缩小不能扩大。
5. 重写子类和父类的方法必须一样,方法体不一样。
6. 重写方法必须是非静态。
快捷键alt+insert+override
多态
- 父类可以调用自己的方法和子类重写的方法,但不能调用子类独有的方法。
- 子类可以调用自己的方法和从父类继承过来的方法。
- 当子类没有重写父类方法时,调用父类的方法,当子类重写父类方法后子类对象和父类对象都调用子类重写后的方法(基于父类指向子类)。
- 当父类想要调用子类独有方法时可以将父类对象强制转换为子类对象(高->低)。
抽象类
- 通过abstract修饰词定义抽象类。
- 抽象类中的方法可以是抽象方法也可以不是。
- 类中存在抽象方法那么这个类必须是抽象类。
- 如果一个类继承了一个抽象类,那么这个类必须重写父类的抽象方法,除非这个类也为抽象类或者父类中没有抽象方法。
- 不能new这个抽象类,只能通过他的子类去实现它。
接口
- 接口通过interface定义。
- 接口中只有定义,不能有实现。
- 接口必须有实现类,通过implements实现。(存在命名规范接口一般service结尾,实现类在接口名后面加上impl)。
- 接口可以实现多继承。