多态
Java引用类型变量有两种类型:1.做出来时确认===>编译
2.用的时候确认===>运行
编译的类型变量是声明时确定的
运行的类型是实例对象时赋给该对象时确定的
例子:
多态的表现形式
例子:
在这个例子中第三行Printer 指的是Printer类 不是HpPrinter
第四行的print方法是重写的HpPrint中的print方法
引用类型的强制转换
强制类型转换是把大的类型转换为小的类型。
在我们的引用数据里,大的类型是父类,小的类型是子类。
只可能发生在子类和父类的关系中
例子:
instanceof运算符进行判断
instanceof运算符一般用于在我们对引用数据类型进行强制类型转换之前判断使用。
避免在实际的运行过程中出现 ClassCastException
例子:
在这里强制转换只能是父类转换成子类 而子类和子类不好相互之间转换
包装类
在Java中,基本数据类型本身不是对象,但是为了面向对象设计语言的规范使用,Java对8大基本数据类型进行了包装,提高了相应的构造器、方法以供使用。
例子:
基本数据类型都有默认值
包装类无默认值 所以要赋值 假如没赋值 控制台会报错:空指针异常
抽象类
父类中只知道子类中应该包含什么样的方法,但是无法知道其具体的实现内容。
抽象方法和抽象类都是使用 abstract 修饰的
如果在一个类中定义了抽象方法,那么这个类就是抽象类;
抽象类是无法实例化的,只能作为父类被继承使用;
抽象类的构造器只能用于被实现的子类的构造器调用。
抽象类就是只得是父类的模板,不能实例化,但是可以有构造器
通过继承父类的抽象类来创建实例化对象 实现各种需求
final修饰符
final 可以修饰在类、成员变量、方法
如果修饰类:则该类不会被继承(一般在开发中很少使用);
如果修饰成员变量:一旦给成员变量赋值后就不允许修改其值,一般用在对常量的定义中。
如果修饰方法:该方法不能被重写
例子: