Java 继承和私有方法

Java 继承和私有方法,java,inheritance,Java,Inheritance,给定以下代码块: public class Trial { public static void main (String[] args){ B obj = new B(); obj.doMethod(); #prints "From A". } } class A { private void method(){System.out.print("from A");} public void doMethod(){method(

给定以下代码块:

public class Trial {
    public static void main (String[] args){
        B obj = new B();
        obj.doMethod(); #prints "From A".
    }
}

class A {
    private void method(){System.out.print("from A");}
    public void doMethod(){method();}
}

class B extends A {
    public void method(){System.out.print("from B");}
    public void doMethod(){super.doMethod();}
}

结果是调用了类A中的方法()。为什么会这样

您可以通过这种方式显式地实现它
super
从基类调用方法,基类是
A

public void doMethod(){super.doMethod();}
因此,方法链接如下所示:

B.doMethod() -> A.doMethod() -> A.method() -> "from A"

您可以通过这种方式显式地实现它
super
从基类调用方法,基类是
A

public void doMethod(){super.doMethod();}
因此,方法链接如下所示:

B.doMethod() -> A.doMethod() -> A.method() -> "from A"
因为,请参见下文:

class B extends A {
    public void method(){System.out.print("from B");}
    public void doMethod(){super.doMethod();}
}
在类B的doMethod()中,使用super.doMethod()调用类A的doMethod()。很明显,它是在打印Class A的doMethod()。

因为,请参见以下内容:

class B extends A {
    public void method(){System.out.print("from B");}
    public void doMethod(){super.doMethod();}
}

在类B的doMethod()中,使用super.doMethod()调用类A的doMethod()。很明显,它是在打印A类的doMethod()。

你用super关键字来调用doMethod。这意味着它将调用父实现
有关的更多信息,请使用super关键字调用doMethod。这意味着它将调用父实现
更多关于我想你的问题是如果在
A类
私有无效方法(){System.out.print(“from A”);}
是私有的,那么为什么在
B类
中“from A”打印

答案很简单,您不能从任何其他类调用类的
method()
,但您可以使用它自己的对象调用它


调用
super.doMethod()时
那么它的super和
方法()的函数是它自己的方法,所以它可以调用它。

我想你的问题是,如果在
类A中
私有无效方法(){System.out.print(“from A”);}
是私有的,那么为什么在
类B中“from A”打印

答案很简单,您不能从任何其他类调用类的
method()
,但您可以使用它自己的对象调用它


调用
super.doMethod()时然后它的super函数和
method()
是它自己的方法,因此它可以调用它。

您的代码提供了简单的对象创建(B obj=new B();)和使用super的调用。Super的用法和其他提到的父类的用法一样。如果您尝试像(A obj=new B();)这样更有趣的方法,事情可能会有所不同。

您的代码提供了简单的对象创建(B obj=new B();)和使用super的调用。Super的用法和其他提到的父类的用法一样。如果您尝试像(A obj=new B();)这样更有趣的方法,事情可能会有所不同。

类A中的方法()是私有的,私有方法不能被重写。当重写时,最好使用@Override注释

class B extends A {

    @Override
    public void method(){System.out.print("from B");} // Compile error
}
如果将方法更改为静态方法,则会发生类似的情况

class A {
    public static void method(){System.out.print("from A");}
}

class B extends A {
    public static  void method(){System.out.print("from B");}
}
类A中的方法()是私有的,不能重写私有方法。当重写时,最好使用@Override注释

class B extends A {

    @Override
    public void method(){System.out.print("from B");} // Compile error
}
如果将方法更改为静态方法,则会发生类似的情况

class A {
    public static void method(){System.out.print("from A");}
}

class B extends A {
    public static  void method(){System.out.print("from B");}
}

对不起,打错了。旨在询问调用类A中的方法()的原因。抱歉,输入错误。用于询问调用类A中的方法()的原因。