概述
目录
向下转型
instanceof 关键字
向下转型
当我们使用了对象的多态性之后,内存中实际上是加载了子类特有的属性和方法,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法,子类特有的方法不能调用。
如何才能调用子类特有的属性和方法?我们可以使用向下转型,即使用强制类型转换符
class Person {
public void walk() {
System.out.println("人可以走路");
}
public void eat() {
System.out.println("人可以吃饭");
}
}
class Student extends Person{
public void walk() {
System.out.println("学生可以走路");
}
public void eat() {
System.out.println("学生可以吃饭");
}
public void study() {
System.out.println("学生努力学习");
}
}
class Child extends Person{
public void walk() {
System.out.println("小朋友可以走路");
}
public void eat() {
System.out.println("小朋友可以吃饭");
}
public void play() {
System.out.println("小朋友开心的玩耍");
}
}
public class Test {
public static void main(String[] args) {
Person p = new Student();
p.eat();
Student s = (Student)p; // 向下转型
Person p1 = (Person)p;
s.study();
p1.walk();
}
}
>>> 学生可以吃饭
学生努力学习
学生可以走路
由此可见,向下转型可以让我们使用子类特有的方法
向下转型可以转型为子类,本子类的父类,但不可以转型为与转换子类平行的其他子类类型(ClassCastException)
public class Test {
public static void main(String[] args) {
Person p = new Student();
Child c = (Child)p; // 向下转型
c.play();
}
}
>>> error:java.lang.ClassCastException
我们定义的 Student 类型,却向下转型为 Child 类型,这是不被允许的操作,虽然编译时没有报错,但是运行结构却抛出了 ClassCastException 异常
如何避免向下转型失败的情况呢,我们就可以引入 instanceof 关键字啦
instanceof 关键字
instanceof 返回一个 Boolean 类型的值,用来判断是否为同一类型
为了避免在向下转型时出现 ClassCastException 异常,我们在向下转型之前,先进行 instanceof 判断,一旦返回 true 就进行向下转型,如果返回 false ,则不执行向下转型
public class Test {
public static void main(String[] args) {
Person p = new Student();
if(p instanceof Student) {
System.out.println("可以转型为Student");
}
if(p instanceof Child) {
System.out.println("可以转型为Child");
}
if(p instanceof Person) {
System.out.println("可以转型为Person");
}
if(p instanceof Object) {
System.out.println("可以转型为Object");
}
}
}
>>> 可以转型为Student
可以转型为Person
可以转型为Object
最后
以上就是纯真毛豆为你收集整理的【Java笔记】向下转型与instanceof关键字向下转型instanceof 关键字的全部内容,希望文章能够帮你解决【Java笔记】向下转型与instanceof关键字向下转型instanceof 关键字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复