面向对象编程
特点:
类包含什么
类由属性、方法、构造器、代码块、内部类组成
用于定义类包含的数据,即静态特征
属性声明格式
[修饰符] 属性类型 属性名 = [默认值]
用于定义类的行为特征和功能实现,即能做什么事
属性
在类里面分为成员变量和局部变量
区别如下:
| 成员变量 | 局部变量 | |
|---|---|---|
| 代码位置不同 | 类中方法或代码块外定义的变量 | 类中方法或代码块中定义的变量 |
| 作用范围不同 | 当前类中所有地方 | 当前方法或代码块中 |
| 是否有默认值 | 有默认值(具体参考各类型变量默认值),未设置时将使用默认值 | 没有默认值,必须设置初始值,否则使用时将会报错 |
| 内存中位置不同 | 堆内存 | 栈内存 |
| 作用时间不同 | 当前对象从创建到销毁 | 当前方法从开始执行到执行完毕 |
注意点:
就近原则
方法
类中的一个特殊的方法,其方法名与类名相同,在创建类的具体对象时自动调用,用于为对象进行初始化操作。
默认构造器:
与其他方法的区别:
重写:
发生在子类和父类中,当子类对父类提供的方法不满意的时,可以对父类的方法进行重写
重写的格式要求:
子类的方法名字和父类必须一致,参数列表(个数,类型,顺序)也要和父类一致。
重载
同一个类中,当方法名相同、形参列表不同时,多个方法构成了重载。
重写与重载的区别
| 英文 | 位置 | 修饰符 | 返回值 | 方法名 | 参数 | 抛出异常 | 方法体 | |
|---|---|---|---|---|---|---|---|---|
| 重载 | overload | 同一个类中 | 无关 | 无关 | 必须相同 | 必须不同 | 无关 | 不同 |
| 重写 | override | 子类和父类中 | 父类的权限修饰符要低于子类的 | 父类的返回值类型要大于子类 | 必须相同 | 必须相同 | 小于等于 | 不同 |
代码块
代码块分类:普通块、构造块、静态块、同步块
位置位于方法中,由{}包括起来的代码,主要用于限制了局部变量的作用范围
位于类中,方法外,由{}包括起来的代码
位于类中,方法外,由{}包括起来的代码,{}前面加上了static修饰
注意:静态块中只能使用静态属性和静态方法
修饰符
在类中一共支持4种权限修饰符,权限从低到高分别为 private、default、protected、public,
注:default为缺省修饰符,即未显示定义修饰符时即为default修饰符,并且default修饰也不允许显示定义。
属性和方法:四种修饰符均支持
类:只支持default(缺省)、public修饰符
四种修饰符权限控制如下表
| 同一个类 | 同一个包 | 子类 | 所有类 | |
|---|---|---|---|---|
| private | ✅ | |||
| default | ✅ | ✅ | ||
| protected | ✅ | ✅ | ✅ | |
| public | ✅ | ✅ | ✅ | ✅ |
被static修饰的属性和方法为静态内容,静态内容先于对象存在,被所有该类的对象共享,共用一块内存。
访问方式: 类名.属性名 或 类名.方法名
注意:
this指代当前对象,this可以修饰属性、方法、构造器
举例:this修饰构造器
同一个类中的构造器可以相互用this调用,注意:this修饰构造器必须放在第一行
public class Person {
String name;
Int age;
public Person(){}
public Person(String name){
this.name = name;
}
public Person(String name, int age){
// 同一个类中的构造器可以相互用this调用
this(name);
// this修饰构造器必须放在第一行
this.age = age;
}
}
super指代当前对象的父类。
super修饰属性和方法:
在子类的方法中,可以通过 super.属性 super.方法 的方式,显示的去调用父类提供的属性,方法。
在通常情况下,super.可以省略不写
特殊情况下,当子类和父类的属性或方法重名时,你要想使用父类的属性或方法,必须加上修饰符super.,只能通过super.属性或方法来调用
super修饰构造器:
调用父类构造的代码
super()
抽象类与抽象方法
抽象类中可以定义n个抽象方法
import 导包
import java.util.Date;
public class Demo {
public static void main(String[] args) {
new Date();
// 导包以后,还想使用其他包下同名的类,就必须要手动写全所在的包
new java.sql.Date(10L);
}
}
import java.util.*
设置目录平级格式(不显示包含关系),便于查看需要导入的包

7. 静态导入
导包时加上static修饰符
import static java.lang.Math.*;
静态导入后,同一个类中有相同方法时,优先使用自己定义的方法
其他
用于判断对象是否是指定类的实例
if (obj instanceof person) {
System.out.println("是person类的对象");
}
向上转型:将子类强转为父类或者间接父类
Person person = new Boy();
向下转型:将父类强转为子类或者间接子类
Boy boy = new Person();
系列文章