向下转换是指子类引用父类的对象。我试过没有instanceof运算符。
class Food { }
class bread4 extends Food {
static void method(Food a) {
bread4 b=(bread4)a;
System.out.println("ok downcasting performed");
}
public static void main (String [] args) {
Food a=new bread4();
bread4.method(a);
}
}
任何人都可以通过使用instanceof运算符来帮助我吗?
答案 0 :(得分:2)
instanceof 运算符提供运行时类型检查。例如,如果你有一个Food类和两个子类型,Bread4和Bread5,那么:
static void method(Food a) {
Bread4 b = (Bread4) a;
System.out.println("Downcasting performed");
}
调用此方法,如:
Food four = new Bread4();
Food five = new Bread5();
Bread4.method(four); //the cast inside is done to Bread4, therefore this would work
Bread4.method(five); //the object of type Bread5 will be cast to Bread4 -> ClassCastException
为避免这种情况,请使用 instanceof 运算符
static void method(Food a) {
if (a instanceof Bread4) {
Bread4 b = (Bread4) a;
System.out.println("Downcasting performed");
}
}
因此,如果你打电话
Bread4.method(five)
检查返回false,因此不会发生ClassCastException。
希望这能回答你的问题。
答案 1 :(得分:1)
以下是使用instanceof
运算符的方法:
static void method(Food a) {
if (a instanceof bread4) {
bread4 b = (bread4) a;
System.out.println("Downcasting performed");
}
}
instanceof
运算符在左侧获取一个对象,并检查它是否是右侧参数的一个实例。
obj instanceof Claz
如果true
的班级是obj
的实例,则会返回Claz
。
另外,我还强烈建议您遵循Java命名约定。不要命名您的班级bread4
,而是将其命名为Bread4
。
类应以大写字母开头,而变量和方法应以小写字母开头。