Java 私有实例方法在运行时是否没有边界?

Java 私有实例方法在运行时是否没有边界?,java,dynamic,private,overriding,Java,Dynamic,Private,Overriding,请看下面的代码 class TestClass{ private void privMethod() { System.out.println("TestClass Method"); } public static void main(String... args) { TestClass obj=new SubClass(); obj.privMethod(); } } class SubClass extends TestClass { private vo

请看下面的代码

class TestClass{
private void privMethod()
{
    System.out.println("TestClass Method");
}
public static void main(String... args)
{
     TestClass obj=new SubClass();
     obj.privMethod();
}
}

class SubClass extends TestClass
{
 private void privMethod()
{
    System.out.println("SubClass Method");
}
}
当我编译这段代码时,它被编译得很好。 当我运行TestClass时,输出是:TestClass方法 ref.变量obj属于TestClass类型,但它引用的是子类的对象,因此在运行时它应该与子类的privMethod()绑定。
你能解释一下吗?

private
方法不会被子类中的方法重写。只有
public
protected
包private
可以覆盖。因此,不应用运行时的多态性行为

如果将注释
@Override
添加到子类中声明的方法,则会出现编译错误:

@Override  // error
private void privMethod()
{
    System.out.println("SubClass Method");
}

private
方法不会被子类中的方法重写。只有
public
protected
包private
可以覆盖。因此,不应用运行时的多态性行为

如果将注释
@Override
添加到子类中声明的方法,则会出现编译错误:

@Override  // error
private void privMethod()
{
    System.out.println("SubClass Method");
}

私有修饰符字段/方法只能在其自己的类中访问。

更多关于

因此,虽然
子类
扩展了
TestClass
,但TestClass的privemethod()对子类来说根本不可见。因此,当您在子类中实现privMethod()方法时,它不会重写TestClass的方法

要确保覆盖超类的方法,可以使用@Override Java annotation。如果方法与超类中的方法不匹配,编译器将给出以下错误

子类类型的方法privMethod()必须重写或实现超类型方法


私有修饰符字段/方法只能在其自己的类中访问。

更多关于

因此,虽然
子类
扩展了
TestClass
,但TestClass的privemethod()对子类来说根本不可见。因此,当您在子类中实现privMethod()方法时,它不会重写TestClass的方法

要确保覆盖超类的方法,可以使用@Override Java annotation。如果方法与超类中的方法不匹配,编译器将给出以下错误

子类类型的方法privMethod()必须重写或实现超类型方法


两种方法打印的内容相同。是什么让你认为你可以通过查看输出来判断哪个正在运行?抱歉,输入错误,我已经编辑了它,问题仍然存在。通常,当你有两个这样的私有方法时,它们被视为完全不同的,而不是相互覆盖,问题是,既然obj是指子类的对象,当我调用obj.privMethod()时,它应该在运行时调用子类的privMethod(因为实例方法在运行时是有界的),所以输出应该是:subClass method。但并不是两种方法都打印相同的内容。是什么让你认为你可以通过查看输出来判断哪个正在运行?抱歉,输入错误,我已经编辑了它,问题仍然存在。通常,当你有两个这样的私有方法时,它们被视为完全不同的,而不是相互覆盖,问题是,既然obj是指子类的对象,当我调用obj.privMethod()时,它应该在运行时调用子类的privMethod(因为实例方法在运行时是有界的),所以输出应该是:subClass method。但是它不是主要的问题不是privMethod()是否过度使用,而是动态绑定的问题,我们知道实例方法是在运行时根据实际对象而不是ref.变量调用的,因此obj.privMethod()应该在子类而不是TestClass中运行privMethod。但是输出我们显示TestClassMethod@AnuragShukla您所描述的动态绑定不适用于
private
方法。它只适用于具有上述访问修饰符的方法(多态性与方法重写密切相关)。在这种情况下,父类中的方法和子类中的方法在运行时是完全不相关的。可能我在这里遗漏了一些东西,请帮助我哪里出了问题。1-在任何情况下,子类的对象如何访问TestClass的私有方法?因为私有方法不会被子类继承?@AnuragShukla请参阅
SubClass
无法访问父类中的
private
方法。但这并不意味着动态类型为
SubClass
的对象不能在运行时执行它。是的,这非常有用。谢谢:)主要的问题不是privMethod()是否过度使用,而是动态绑定的问题,我们知道实例方法是在运行时根据实际对象而不是ref.变量调用的,因此obj.privMethod()应该在子类而不是TestClass中运行privMethod。但是输出我们显示TestClassMethod@AnuragShukla您所描述的动态绑定不适用于
private
方法。它只适用于具有上述访问修饰符的方法(多态性与方法重写密切相关)。在这种情况下,父类中的方法和子类中的方法在运行时是完全不相关的。可能我在这里遗漏了一些东西,请帮助我哪里出了问题。1-在任何情况下,子类的对象如何访问TestClass的私有方法?因为私有方法不会被子类继承?@AnuragShukla请参阅
SubClass
无法访问pare中的
private
方法