Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 子类如何与超类交互_Java - Fatal编程技术网

Java 子类如何与超类交互

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是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("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
    }
}
如您所见,初始化为A
B
A
类型的对象将调用
B
中的任何重写方法,但无法看到
B
中的新方法。未被重写的方法将使用超类中的版本


您可以将类强制转换为更特定的对象(对象声明为子类类型的超类),但如果该对象实际上不是更特定类型的实例,您将在运行时得到一个
ClassCastException

请阅读关于类和继承的Java基本教程。母类方法在子类中可用,只要方法不是“私有的”,这不是我要问的,也许这将帮助它很好地解释这一点,这很好,但我认为OP实际上是在寻找一个向上投射的例子。他有A,他想从B调用一个方法。@Gimby,这个方法不会向上转换,这将是普通类型转换。不过,我会把它添加到我的答案中。