Java 子类如何与超类交互
我想问的问题是,你能提供以下信息吗。super是sub的超类Java 子类如何与超类交互,java,Java,我想问的问题是,你能提供以下信息吗。super是sub的超类 super thing = new sub(); 然后从子类调用一个方法 class A { public void foo() { System.out.println("foo"); } public void baz() { System.out.println("baz"); } } class B extends A { public void foo() { System.out.println
super thing = new sub();
然后从子类调用一个方法
class A
{
public void foo() { System.out.println("foo"); }
public void baz() { System.out.println("baz"); }
}
class B extends A
{
public void foo() { System.out.println("fizz"); }
public void bar() { System.out.println("bar"); }
}
public class Program
{
public static void main(String[] args)
{
A obj1 = new A();
A obj2 = new B();
obj1.foo(); // prints "foo"
obj1.baz(); // prints "baz"
obj2.foo(); // prints "fizz"
obj2.baz(); // prints "baz"
obj2.bar(); // compile error
((B)obj2).bar(); // prints "bar"
((B)obj1).bar(); // runtime error
}
}
如您所见,初始化为AB
的A
类型的对象将调用B
中的任何重写方法,但无法看到B
中的新方法。未被重写的方法将使用超类中的版本
您可以将类强制转换为更特定的对象(对象声明为子类类型的超类),但如果该对象实际上不是更特定类型的实例,您将在运行时得到一个
ClassCastException
。请阅读关于类和继承的Java基本教程。母类方法在子类中可用,只要方法不是“私有的”,这不是我要问的,也许这将帮助它很好地解释这一点,这很好,但我认为OP实际上是在寻找一个向上投射的例子。他有A,他想从B调用一个方法。@Gimby,这个方法不会向上转换,这将是普通类型转换。不过,我会把它添加到我的答案中。