我们可以创建一个 class(超级或子 class)的对象,它不能从 class 调用任何方法吗?
Can we create an object of a class (super or sub class) which cannot invoke any methods from the class?
我的一位朋友在接受采访时问了这个问题。
Assume that there is a class called
A which is a super class and a sub class called B . Class A has a method called blah() which is also overridden in the subclass B . So create a object in such a way that object created cannot invoke any of the methods from both class(can use both upcasting and downcasting).Is this possible in java or not. If possible construct the object.
所以我尝试了这个,但我在运行时只收到 ClassCast 异常。
所以上面提到的问题是否可能。
提前致谢。
这在 java、
中是不可能的
static class A{
public void printF(){
System.out.println("a");
}
}
static class B extends A{
@Override
public void printF(){
System.out.println("b");
}
}
public static void main(String args[]){
A obj1 = new A();
obj1.printF();
B obj2 = new B();
obj2.printF();
A obj3 = new B();
obj3.printF();
// this will throw error
B obj4 = (A)new B();
B obj5 = new A();
}
所以我们可以预期输出如下,
obj1.printF()
将打印 a
因为它是使用 class A
创建的
obj2.printF()
将打印 b
因为它是使用 class B 和 class 创建的A 是 class B 的超 class 因为 class B 继承了 class A 和 class B 覆盖了 class A 中的方法
obj3.printF()
将打印 b
因为它是使用 class B 创建的并且由于 class B 正在覆盖 class A printF()
method.And 这是在 java
中使用向上转换
(向上转型 - 向上转型是将子对象类型转换为父对象)
B obj4 = (A)new B()
or B obj5 = new A();
is not possible in java 这是试图隐式向下转换一个对象,这将抛出 ClassCastException
(抛出 ClassCastException 以指示代码已尝试将对象转换为它不是实例的子class。)
java中向下转型的方法是使用instanceOf()
方法。这是明确的沮丧。
A obj3 = new B();
if(obj3 instanceof B){
B obj5 = (B)obj3;
obj5.printF();
}
(Downcasting-向下转型是指将父对象类型转换为子对象,不能隐式向下转换。)
我的一位朋友在接受采访时问了这个问题。
Assume that there is a class called A which is a super class and a sub class called B . Class A has a method called blah() which is also overridden in the subclass B . So create a object in such a way that object created cannot invoke any of the methods from both class(can use both upcasting and downcasting).Is this possible in java or not. If possible construct the object.
所以我尝试了这个,但我在运行时只收到 ClassCast 异常。
所以上面提到的问题是否可能。
提前致谢。
这在 java、
中是不可能的static class A{
public void printF(){
System.out.println("a");
}
}
static class B extends A{
@Override
public void printF(){
System.out.println("b");
}
}
public static void main(String args[]){
A obj1 = new A();
obj1.printF();
B obj2 = new B();
obj2.printF();
A obj3 = new B();
obj3.printF();
// this will throw error
B obj4 = (A)new B();
B obj5 = new A();
}
所以我们可以预期输出如下,
obj1.printF()
将打印a
因为它是使用 class A 创建的
obj2.printF()
将打印b
因为它是使用 class B 和 class 创建的A 是 class B 的超 class 因为 class B 继承了 class A 和 class B 覆盖了 class A 中的方法
obj3.printF()
将打印b
因为它是使用 class B 创建的并且由于 class B 正在覆盖 class AprintF()
method.And 这是在 java
中使用向上转换 (向上转型 - 向上转型是将子对象类型转换为父对象)B obj4 = (A)new B()
orB obj5 = new A();
is not possible in java 这是试图隐式向下转换一个对象,这将抛出ClassCastException
(抛出 ClassCastException 以指示代码已尝试将对象转换为它不是实例的子class。)
java中向下转型的方法是使用instanceOf()
方法。这是明确的沮丧。
A obj3 = new B();
if(obj3 instanceof B){
B obj5 = (B)obj3;
obj5.printF();
}
(Downcasting-向下转型是指将父对象类型转换为子对象,不能隐式向下转换。)