/*
*将父类型强制转换为子类型
*/
class person{
public void eat(){
System.out.println("人吃饭");
}
}
class student extends person{
public void study(){
System.out.println("学生学习");
}
}
public class demo(){
public static void main(String[] args){
person p=new student();//父类引用指向子类对象
p.eat();//可以调用,学生都是人,可以吃饭
// p.study();//不可以,此时把学生看作人,不是所有人都学习,当把学生看作人,不能调用人的方法。
student s=(student)p;//强转,向下转型
//现在相当于回归本色
}
}
2.多态中成员变量转型:
/*
*多态中成员变量的访问特点
*编译时期:编译器会检查多态形式等号左面
*的类型是否有调用成员变量,如果有,编译通过,没有失败
*运行时期:
*运行时期检查等号左面的成员变量获取其值
*便宜看左边,运行还看左边
*/
class Fu(){
int number=4;
}
class zi extends fu{
int number=10;
}
public class demo{
public static void main(String[] args){
//定义的对象的类取决于前面的
Fu fu=new zi();//父类引用指向子对象}}
3.多态中成员方法访问特点:
和成员变量类似,分为编译时期和运行时期,编译时期要看等号左边的类型中是否定义了条用的成员方法,如果有编译通过,没有,编译失败,运行时期要看等号右边的类型中是否调用了定义的成员方法,如果有直接执行。
4.多态中的instanceof运算符:
/*
*instanceof运算符
*运算结果为boolean类型
interface JD{}
class Animal{}
class Dog extends Animal implements JD{}
public class instanceof{
public static void main(String[] args){
Dog d=new Dog();
//判断d能否是Dog类型
//实际意义:new Dog()能否成为狗,ok,返回true
boolean b1=d instanceof Dog;
Aniumal a=new Dog();
//判断a引用
boolean b2=a instanceof Dog;
Jd jd=new Dog();
boolean b3= jd instanceof Dog;
}
}