目录
运算符instanceof的用法
instanceof运算符:判断一个引用类型的变量所引用的对象是否是一个类的实例
一般形式:引用类型变量 instanceof 类
对象转型
1.引用类型变量的类型转换(对象转型)
子类类型和父类类型之间的转换关系
前提:存在继承关系(无继承关系的引用类型不能转换)
2.两种转换方式
向上转型:
子类给父类赋值(直接或间接方式)
父类类型引用变量指向子类对象
向下转型:
父类给子类赋值(直接或间接)
将父类对象强制转换为子类类型,强制类型转换(显示类型转换)
父类对象必须在子类对象中才能向下转型,否组运行期报错
可以用父类类型引用变量指向子类对象(里的父类对象),但是不能用子类类型引用变量直接指向父类对象
多态
多态:同样的消息被不同类型的对象接收导致不同的行为
必要条件:有继承(实现),有重写,使用父类引用指向子类对象(接口类型引用变量指向实现类对象)
一个引用类型变量声明为父类类型,引用子类对象,变量不能访问子类中独有的属性和方法
方法的绑定
建立方法调用和方法体之间的关联
静态绑定方法:编译时编译器就能准确地判断应该调用哪个方法(早绑定、先期绑定)
动态绑定方法:编译时检查语法,运行时判断所引用对象的实际类型,根据实际类型调用相应的方法(晚绑定、后期绑定)
编译时:根据引用变量类型,判定此类是否有此方法
运行时:判定引用变量指向的对象类型,根据此对象类型调用方法
代码演示
//IntanceofTest01
public class IntanceofTest01 {
public static void main(String[] args) {
Father father = new Father();
Son son = new Son();
//instanceof判断当前对象是不是由该类创建的
System.out.println(father instanceof Father);//true
System.out.println(father instanceof Son);//false
System.out.println(son instanceof Father);//true
System.out.println(son instanceof Son);//true
}
}
class Father{}
class Son extends Father{}
//Student02
public class Student02 extends Person {
public static void main(String[] args) {
//对象类型之间也存在类型转换称之为对象转型
//条件是必须要有继承关系,无继承,无转换
//对象转换分为向上转型和向下转型
//向上转型是:子类对象给父类的引用变量赋值,自动转换
//向上转型的实质是:子类中小的父类对象给父类中的引用变量赋值
//两种写法:第一种
Person p1 = new Person();
Student02 s1 = new Student02();
p1 = s1; //子类对象给父类的引用变量赋值 p1 s1 都是对象名
//第二种写法:
Person p2 = new Student02(); //子类的对象直接给父类的引用变量赋值 new Student02()对象
//向下转型:父类对象给子类的引用变量赋值,强制转换
//向下转型要想用,需要保证父类对象在子类对象之中,也就是需要先进行向上转型
Person p3 = new Student02();
Student02 s3 = new Student02();
s3 = (Student02)p3;
}
}
class Person{}
//Demo03
public class Demo03 {
public static void main(String[] args) {
//多态:同样的消息被不同的对象接收产生不同的行为
//多态的使用条件:继承、重写、向上转型
Animal a1 = new Animal();
Animal a2 = new Cat();
Animal a3 = new Dog();
a1.cry();
a2.cry();
a3.cry();
}
}
class Animal{
public void cry(){
System.out.println("动物的叫声");
}
}
class Cat extends Animal{
@Override
public void cry() {
System.out.println("喵喵");
}
}
class Dog extends Animal{
@Override
public void cry() {
System.out.println("汪汪");
}
}