学习内容:
**1.多态;
2.包装类;
3.final 修饰符;
4.抽象类。**
一.多态:
Java引用类型变量有两种类型:一种是编译时的类型,一种是运行时的类型。
- 编译的类型是由声明变量的时候决定的。
- 运行时类型由实际赋给该变量的对象决定。
如果运行时的类型和编译时的类型不一致就会出现所谓的多态。
- 首先编译时类型和运行时类型是一种父类和子类的关系。
- 多态最常用的场景就是子类重写父类的方法后,如果引用变量的类型为父类,而对象为子类,如果引用类型调用重写方法,会去执行子类定义的实现。
instanceof运算符:
instance运算符的前一个操作数一般是引用数据类型变量,后一个操作数是类名(接口),它是用于判断前面的对象是否是后面的类、或者其子类。如果是的话,返回true。
instanceof运算符一般用于在我们对引用数据类型进行强制类型转换之前判断使用。
避免在实际的运行过程中出现 ClassCastException
代码实例:
public class Client1 {
public static void main(String[] args) {
Animal tom = new Dog();
Animal mimi = new Cat();
Animal ani1 = new Animal();
if (ani1 instanceof Dog) { // 此处ani1的数据类型为 Animal 所以运算的结果为 false
Dog dog1 = (Dog) ani1;
System.out.println(dog1.getAge());
}
if (tom instanceof Dog) { // 此处tom运行时数据类型为 Dog 所以运算的结果为 true,可以进行转换
Dog dog2 = (Dog) tom; // 强制类型转换
dog2.setAge(20);
System.out.println(dog2.getAge());
}
tom.cry();
mimi.cry();
}
}
二.包装类:
包装类中一般会提供两种构造器用于构建对象
- 使用基本数据类型的参数;
- 使用字符串类型的参数:对于此类参数,在实际创建对象的时候要注意输入的值要满足条件;
从基本数据转成引用数据的方法:
- 从构造器创建
- 自动装箱创建
从引用数据类型转成基本数据类型,使用 对象.xxxxValue();
int y = 10;
Integer yi = new Integer(y);
Integer yi2 = y;
int y3 = yi.intValue();
boolean b = false;
Boolean bi = new Boolean(b);
Boolean bi2 = b;
boolean bi3 = bi2.booleanValue();
三.final 修饰符:
final 可以修饰在类、成员变量、方法
- 如果修饰类:则该类不会被继承(一般在开发中很少使用);
- 如果修饰成员变量:一旦给成员变量赋值后就不允许修改其值,一般用在对常量的定义中;
- 如果修饰方法:该方法不能被重写。
> 在实际的开发中, final 用的最多的场景是结合 static 关键字定义类变量,即静态变量。
定义为 final 另一个意图就是将变量的值保护起来。
public class Client1 {
public static final String SCHOOL_NAME = “南通青鸟IT教育”;
public static void main(String[] args) {
int r = 20;
System.out.println(Math.PI * 2 * r);
// Client1.SCHOOL_NAME = “青鸟IT教育”; // 错误代码,不能被修改
}
}
“`
四.抽象类:
抽象方法和抽象类:
抽象方法和抽象类都是使用 abstract 修饰的
- 如果在一个类中定义了抽象方法,那么这个类就是抽象类;
- 抽象类是无法实例化的,只能作为父类被继承使用;
- 抽象类的构造器只能用于被实现的子类的构造器调用。
abstract 是不能修饰成员变量的;
如果方法定义为 static,就不能使用 abstract 修饰符;
如果方法定义为 private ,也不能使用 abstract 修饰符;