我是靠谱客的博主 纯真毛豆,最近开发中收集的这篇文章主要介绍【Java笔记】向下转型与instanceof关键字向下转型instanceof 关键字,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

向下转型

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 关键字所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部