学习心得
思想
面向对象(Object Oriented Programming)是一种编程思想,是将一个问题的所有参与对象创建出来,赋予对象相应的行为和属性
类和对象
类(class)是具有相同属性和行为的对象的集合
属性:描述对象的特征,通过变量形式表现
行为:描述对象的动作,通过方法形式表现
对象(Object)是类的一个具体实例,是类的具体表现
成员变量和局部变量
成员变量定义在类中,拥有默认值
局部变量定义在方法中,没有默认值,必须赋值后才能使用
三大特性(封装、继承、多态)
封装性: 通过private来实现封装性,对外提供get和set方法进行相关操作
继承性: 通过extends实现,一个子类只能有一个父类,而一个父类可以有多个子类。
多态性: 父类的引用指向子类的对象
其中向上转型和向下转型需要注意
this和super关键字也需要注意,前者表示当前对象,后者表示父类的;在构造方法中使用this()和super()都必须放在构造方法的第一行
重写(override)和重载(overload)
重写(override)
子类继承父类后,对父类中的某个非私有方法进行重写,达到拓展或重做的目的。
- 重写必须要求方法名、方法返回值、方法参数列表必须相同
- 访问权限不能比父类更严格
- 不能抛出比父类更大的异常
重载(overload)
在一个类中,某个方法在不同的参数下,表现不同的效果。同名不同参。
- 方法名必须相同
- 方法参数列表必须不同(类型和数量)
- 与返回值无关
抽象abstract
abstract是一个修饰符,用于修饰方法或类
当修饰一个方法时,其所在的类也必须为抽象类,即必须有abstract修饰
抽象方法的特点:
- 抽象方法没有方法体
- 抽象方法只能定义在抽象类或接口中
- 抽象方法通常需要子类重写
- abstract不能修饰构造方法和静态方法
抽象类的特点:
- 抽象类不能实例化
- 抽象类中可以有抽象方法,也可以有普通方法
- 抽象类的构造方法在创建其子类对象时会自动执行
接口interface
访问修饰符 interface 接口名{
}
由于java是单继承,如果类A想要继承多个"父类"中的内容时,就不能使用extends,但可以使用implements实现多个接口而达到多继承的目的
接口是一个完全抽象类,其中的方法都是被public abstract修饰的公开抽象方法,其中的属性,都是被public static final修饰的公开的静态常量,需要在定义时赋值才能使用。
接口的特点
- 和抽象类一样,接口也不能实例化
- 接口中没有构造方法和普通方法
static关键字
static可以修饰属性、方法、代码块({}),被static修饰的内容,称为静态成员。
静态成员在类加载时就保存到内存中,所以可以脱离对象存在。在访问时,直接通过类名访问即可。
Java中的Math类中大量使用了static修饰属性和方法,所以直接使用Math进行调用。
特点:
- 被static修饰的属性、方法或代码块称为静态成员,随着类加载而加载到内存中,只加载一次
- 静态成员无需对象参与,通过类名即可访问,也可以使用对象访问
- 静态方法中不能使用非静态成员,可以在静态方法中定义局部变量
- 静态代码块随着类加载而执行一次,优先于构造方法执行
遇到的小问题
像在做这一阶段的相关练习题时,遇到的一点问题如下:
public class Person{
int arr[] = new int[10];
public static void main(String a[]) {
System.out.println(arr[1]);
}
}
结果我就习惯性的认为定义了一个int型数组,没有给初始值,然后输出0。这样想就大错特错了。我们可以看到main方法前面有一个关键字static
,这说明main方法是静态方法,静态方法只能用静态的成员变量,所以结果应该是编译产生错误
总结
在我看来面向对象的学习核心是要理解其思想,了解它的三大特性(封装、继承、多态),然后再去细节的去了解常用的关键字this、super、abstract、interface等。一周的学习挺快的,面对像的相关概念还是需要多记一下。感觉这个阶段都是一些要记得知识。这一阶段的练习题无非就是学生信息增删改查、商品信息增删改查等,操作逻辑基本上都差不多,只要掌握一些操作我感觉就ok了