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中的方法()的原因。