基础特性
- 跨平台是通过 JVM 实现的
- Java代码先被编译成字节码,再由 JVM 把字节码编译成机器码
四大特征
- 封装
- 继承
- 多态
- 抽象
1. 封装(Encapsulation)
- 封装是一种对象功能内聚的表现形式
- 隐藏类的内部实现细节,控制对象的修改及访问的权限
访问修饰符:private
属性私有,提供公共访问方法
不可直接访问属性,仅可访问公共方法
2. 继承(Inheritance)
- 提高代码的复用性,也提高代码的可扩展性
- 两个类之间的继承关系,必须满足
is a
的关系 - 父类/超类;子类/派生类
- Java是单继承,一个类只能有一个直接父类,但可以多级继承,属性和方法逐级叠加
不可继承
构造方法:类中的构造方法只负责创建本类对象,不可继承
private 修饰的属性和方法
父子类不在同一个包中,default 修饰的属性和方法
子类对象的创建
在具有继承关系的对象创建中,构建子类对象会先构建父类对象
由父类的共性内容,叠加子类的独有内容,组合成完整的子类对象
执行顺序:静态代码块 --> 构造代码块 --> 构造函数 --> 普通代码块
继承中执行顺序:父类静态块 --> 子类静态块 --> 父类代码块 --> 父类构造器 -->子类代码块 --> 子类构造器
3. 多态(Polymorphism)
概念:父类引用指向子类对象,从而产生多种形态
二者具有直接或间接的继承关系时,父类引用可指向子类对象,即形成多态
父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法
多态的表现形式: Override 与 Overload
多态的应用
场景一:使用父类作为方法形参实现多态,使方法参数的类型更为广泛
场景二:使用父类作为方法返回值实现多态,使方法可以返回不同子类对象
public class Master {
public void feed(Animal animal) {
animal.eat();
}
public Animal buy (String type) {
Animal animal = null;
if ("dog".equals(type)) {
animal = new Dog();
}
return animal;
}
}
3.1 覆盖(Override)
覆盖又叫重写,覆写
Override 只能针对非静态、非final、非构造方法。由于静态方法属于类,如果父类和子类存在同名静态方法,那么两者都可以被正常调用
方法覆盖原则:
方法名称、参数列表、返回值类型必须与父类相同
访问权限不能变小
方法覆盖
子类行为和父类不一样时,用覆盖
实际运行过程中,依旧遵循覆盖原则,如果子类覆盖了父类中的方法,则执行子类中覆盖后的方法,否则执行父类中的方法
动态链接:当父类中的一个方法只有在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用; 对于父类中定义的方法,如果子类中重写了该方法,那会调用子类中的这个方法
无法调用到子类存在而父类本身不存在的方法,可以调到子类中覆写了父类的方法,这是一种多态实现
3.1.1 向上转型/向下转型
向上转型:父类引用指向子类对象
能调什么,看父类的引用
实际调哪个方法,看引用指向的对象是什么
注:父类的引用指向子类对象,调用被子类覆盖的方法,实际执行的是子类的方法(若子类未重写该方法,调用父类的)
向下转型:将父类引用中的对象强转回子类类型
Animal obj = new Dog();
Dog dog = (Dog) obj;
3.1.2 重写规则
- 不能重写被标识为final的方法
- 子类不能重写父类的静态方法,私有方法
- 如果一个方法不能被继承,则不能重写它。如private方法(因为私有方法不能被子类访问, 所以不能重写,java 私有方法可以重载,不能重写)
3.2 重载(Overload)
重载:一个类中定义多一个相同名称的方法
要求:
- 方法名称相同
- 参数列表不同(类型、个数、顺序)
- 与访问修饰符、返回值类型无关
方法签名:方法名称 + 参数列表 组成一个唯一键
4. 抽象
- 定义类的过程就是抽象和封装的过程
- 类的类型:class, interface, enum
- 类的访问级别:public 和 无访问控制符
- 主要有两部分组成:成员和方法
- 公有方法 > 保护方法 > 私有方法 > getter/setter
抽象类,抽象方法
网友评论