面向对象基础
类与对象
定义类
public class 类名{
//定义属性,属性名符合驼峰命名法
public 数据类型 属性名;
//定义方法,方法名符合驼峰命名法
public 返回值类型 方法名(参数列表){
//方法体
}
}
构造函数
public 构造函数名(参数列表){
}
包括有参构造和无参构造
java是通过类的构造函数,也叫构造方法来创建对象的。
- 方法名必须与类名一致。
- 不需要定义返回值类型。
- 构造方法也是可以被重载的。
创建对象
类名 对象名 = new 类名();
使用对象
访问属性:对象名.属性名
调用方法:对象名.方法名(参数列表)
this关键字
指代当前类的实例化对象。
调用构造方法:this(参数列表)
调用普通方法:this.方法名()
方法重载
- 同一个类中。
- 方法名相同。
- 参数列表不同(个数或类型不同)。
- 与返回值和访问权限修饰符无关。
成员变量和局部变量
public class Text{
String name = "张三";//定义在方法外,成员变量。
public void show(){
int num = 10;//定义在方法中,局部变量。
}
}
封装
封装的步骤
- 修改属性的访问权限,使得外部不能够直接访问。
- 提供外部可以直接调用的方法。
- 在方法中加入属性控制逻辑。
static关键字
static表示静态或全局
有静态变量和静态方法。
继承
继承的基本语句如下:
父类:
public class 类名{
//属性和方法
}
子类:
public class 类名 extends 父类名{
//子类特有的属性和方法
}
子类访问父类
实现了继承关系的父子类,在创建子类对象时,无论是调用无参构造还是有参构造,都会默认先创建父类对象,并且通过父类的无参构造完成实例化的。
调用父类无参构造:super()
调用父类有参构造:super(1)
子类访问权限
同一个类 | 同一个包 | 不同包 | 子类 | |
---|---|---|---|---|
public | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
protected | 可以访问 | 可以访问 | 不可以访问 | 可以访问 |
默认修饰符 | 可以访问 | 可以访问 | 不可以访问 | 不可以访问 |
private | 可以访问 | 不可以访问 | 不可以访问 | 不可以访问 |
包的命名规范
- 由小写字母组成,可以包含数字,但不能以数字开头。
- 使用 ” . “ 来分层,不能将 ” . “ 用作开头或结尾。
- 一般采用网络域名的反向输出。
方法重写
子类在继承父类方法的基础上,对父类方法重新定义并覆盖的操作叫做方法重写。
- 父子类的方法名相同。
- 父子类的方法参数列表相同。
- 子类方法返回值与父类方法返回值类型相同或者是其子类。
- 子类方法的访问权限不能小于父类。
方法重写 VS 方法重载
所在位置 | 方法名 | 参数列表 | 返回值 | 访问权限 | |
---|---|---|---|---|---|
方法重写 | 子类 | 相同 | 相同 | 相同或者是其子类 | 不能小于父类 |
方法重载 | 同一个类 | 相同 | 不同 | 没有要求 | 没有要求 |
public > protected > 默认修饰符 > private
多态
定义一个方法,在具体的生产环境中根据不同的需求呈现出不同的业务逻辑。
多态的使用
- 定义方法时形参为父类,调用方法时传入的参数为子类对象。
- 定义方法时返回值的数据类型为父类,调用方法时返回子类对象。
子类转父类:父类引用指向子类对象,可以自动完成,也叫向上转型。
父类转子类:子类引用指向父类对象,需要强制转换。
抽象方法和抽象类
只声明不需要定义方法体。
声明抽象方法时需要加上abstract关键字。
- 一旦类中定义了抽象方法,则该类也必须声明为抽象类。
- 抽象类不能被实例化。
- 抽象方法没有方法体。
- 抽象类可以定义普通方法,可以没有抽象方法。