Java面向对象阶段总结
在java的基础学习完成之后,迎来了面向对象阶段的学习,其学习难度明显比基础部分要高,充斥着抽象性的概念和内容。
面向对象与面向过程的区别
面向对象:也称OOP,指创建出解决问题的对象,并给其设计方法,重点在于各个对象的执行。
面向过程:也称POP,值按照步骤一步一步解决问题,重点在于详细的解决步骤。
对象和类
对象:即Object,是某个类的具体实例,主要是执行类中的方法。
类:即Class,是拥有相同属性和行为的对象的集合。
变量:分为成员变量、局部变量、静态常量。
-
成员变量:定义在类中的变量,即这个类的属性,有默认值,在对象创建时创建并通过对象访问
-
局部变量:定义在方法中的变量,使用范围在该方法中,没有默认值,赋值之后才能使用,在调用方法时创建
-
静态常量:特殊的成员变量,使用范围在该类中,用static和final修饰,一般在定义时赋值,在类加载时创建,通过类名方法访问
构造方法
一种特殊的方法,方法名和类名要求一致,没有返回值
**特点:**用于初始化成员变量,没有返回值,方法名和类名一致,在new创建对象时自动调用,每个类在定义后都会生成一个隐藏的无参数的构造方法,并在自己创建构造方法后失效,与其他构造方法之间是重载的关系,不能重写。
public 类名(参数列表) {
...
}
封装
如果类中的属性用private修饰了,除当前类的其他类就不允许对其进行访问,起到了保护核心代码的作用。
private String 属性名;
继承
使用extends修饰类名,如
public class 类A extends 类B
就是类A继承了类B,类A是类B的子类,类B是类A的父类,类A可以直接使用类B中的非私有成员。
多态
在满足继承的条件下,子类的对象可以直接保存到父类的变量中,在调用方法时,也是调用的子类重写后的方法。
一般格式为
父类 对象 = new 子类();
其他重点
重写
即**@override**,在满足继承的条件下,子类对父类的某个非私有方法进行重写,以拓展或重做方法。
- 重写时方法名、返回值、参数列表必须相同
- 子类的访问权限不能比父类更严格
- 子类不能抛出比父类更大的异常
重载
即**@overload**,在一个类中,同一个方法可以通过不同参数的调用展现不同的作用。
- 重载的方法名必须相同
- 重载的参数列表必须不同
- 重载与返回值无关
Object类
是所有类的跟类,任何类都直接或间接的继承了该类,所有类都可以调用和重写Object类中的方法。
this和super
作为对象或构造方法使用
对象
- this表示当前类的对象,super表示当前类的父类对象
- 只能用于非静态方法中
构造方法
-
this()表示当前类的无参构造方法,super()表示当前类的父类的无参构造方法
-
只能放在另一个构造方法的第一行,如
public 类名() { this();或super(); ... }
abstract
用于修饰类或者方法,表示该类或方法是抽象的。
interface
即接口,代替class,在抽象类中,当全是抽象方法时,可以将该类定义为一个接口。
static
用于修饰方法或属性,表示静态,可以直接通过类名访问方法或属性。
难点
- 面向过程到面向对象的思维转换;即将问题分割成由多个对象共同解决的一个对象
- 对象和类的理解使用;因为其是面向对象的基础,对其概念和描述的理解要深
- 封装、继承、多态的理解使用;作为面向对象的三大特性,封装的访问限制,继承的复杂性,多态的多样化都是学习的难点
- 重写和重载的调用逻辑;注意重写同名同返同参,重载同名不同参
- 抽象类的理解使用;抽象类主要是在普通类中添加一些抽象方法,主要是起到一个类定义模板的功能
- 接口类的理解使用;接口类与抽象类最大的区别在于抽象类中可以有实例,而接口不行,合理使用接口,如一个类可以继承多个接口,更能满足我们的开发需求。
结语
面向对象的学习更多的是理解上的内容,其代码部分并不复杂,对逻辑思维的要求更高,在解决问题上的效率更快、效果更好,是java学习中必不可少的内容!