《java从小白到大牛》
回归java,自我小笔记
java有关面向对象
[public][abstract|final] class className [extend superclassName][implements interfaceNameList] {
}
封装性与访问控制
java类成员的访问控制
控制等级 | 同一个类 | 同一个包 | 不同包的子类 | 不同包非子类 |
---|---|---|---|---|
私有 | Yes | |||
默认 | Yes | Yes | ||
保护 | Yes | Yes | Yes | |
公有 | Yes | Yes | Yes | Yes |
private、protected、public
访问成员方式:
- 调用。通过类或对象调用它的成员。
- 继承。子类继承父类的成员变量或方法。
static
静态变量和静态方法
static double interestRate = 0.0668;
public static double interestBy(double amt) {
return interestRate * amt;
}
静态方法可以访问静态变量和其他静态方法。(静态方法中不能访问实例成员变量)
(实例方法可以访问实例变量、其他实例方法、静态变量和静态方法)
通过类名或实例名调用静态变量或静态方法。
静态变量初始化:
- 声明同时初始化。
- 需要计算才能初始化,使用静态代码块。
静态代码块
静态代码块在类第一次加载时执行,并只执行一次。
static double interestRate;
static {
interestRate = 0.0668;
}
多态
多态
多态:同一方法,不同的具体实现方式。
发生多态三个前提条件:
- 继承。多态发生在子类和父类之间。
- 覆盖。子类覆盖了父类的方法。
- 声明的变量类型是父类类型,但实例指向子类实例。
public class Person {}
public class Worker extends Person {}
public class Student extends Person {}
Person p1 = new Worker(); // p1是父类类型,指向子类实例,发生多态
引用类型检查
p1 instanceof Person
引用类型转换
只发生于同一棵继承层次树中的应用类型。
对象描述 | Person类型 | Worker类型 | Student类型 |
---|---|---|---|
类型:Person 实例:Student | 支持 | 不支持 | 支持(向下转型) |
类型:Person 实例:Worker | 支持 | 支持(向下转型) | 不支持 |
类型:Person 实例:Person | 支持 | 不支持 | 不支持 |
类型:Student 实例:Student | 支持(向上转型) | 不支持 | 支持 |
类型:Worker 实例:Worker | 支持(向上转型) | 支持 | 不支持 |
向下转型(downcast):将父类引用类型变量转换为子类类型。是自动的。
向上转型(upcast):将子类引用类型变量转换为父类类型。需要强制转换。
Person p2 = new Worker();
// Student p11 = (Student) p2; // 运行时异常。不能确定实例是哪一种类型时,判断一下
if (p2 instanceof Student) {
Student p11 = (Student) p2;
}
final
final修饰的变量为常量,只能赋值一次。
final修饰的局部变量,使用前必须赋值。
final修饰的成员变量在声明时没有赋值的(空白final变量),必须在构造方法或静态代码块中初始化。
final修饰的类不能被继承。(出于设计安全的目的)
常量,只能赋值一次。
final修饰的局部变量,使用前必须赋值。
final修饰的成员变量在声明时没有赋值的(空白final变量),必须在构造方法或静态代码块中初始化。
final修饰的类不能被继承。(出于设计安全的目的)
final修饰的方法不能被子类覆盖。(出于设计安全的目的)