为什么此代码没有';你不调用子类吗?Java中的继承
这是输出:- 我是父母 ----这是::--datastructures.lists.heritation。Child@1a692dec 这是我的孩子为什么此代码没有';你不调用子类吗?Java中的继承,java,inheritance,Java,Inheritance,这是输出:- 我是父母 ----这是::--datastructures.lists.heritation。Child@1a692dec 这是我的孩子 对象的类型是Child,但它不调用Child方法和父方法。我已经给出了这个 在Parent类中,您已将printChild声明为private。。。并称之为。无法重写私有方法。Child类中的printChild对于父类来说是未知的 如果将private修饰符更改为public,则会有一个覆盖,您的示例应该输出您所期望的内容 为什么Java不允
对象的类型是Child,但它不调用Child方法和父方法。我已经给出了这个 在
Parent
类中,您已将printChild
声明为private。。。并称之为。无法重写私有方法。Child
类中的printChild
对于父类来说是未知的
如果将private
修饰符更改为public
,则会有一个覆盖,您的示例应该输出您所期望的内容
为什么Java不允许重写私有方法?好的,基本上,如果你能做到这一点,那么就没有办法用一个子类无法打破的抽象边界来编写一个类。这将是(国际海事组织)一个主要的语言设计短
为什么Java不报告错误或警告?没有错误,因为根据JLS,这是合法的Java。至于警告。。。如果单独编译Parent
,则没有问题,因为编写的代码声明并使用私有方法。如果单独编译Child
,编译器将无法在Parent
类中看到私有方法。(事实上,它甚至可能不存在于编译所针对的父类的.class文件版本中。)只有同时编译父类和子类,编译器才能发现一些奇怪的东西。关键字“this”指向当前类实例,这是私有的void printChild()。然后您在RelationshipTester类中创建了一个类Child的对象。这两个函数的作用域是私有的,这意味着to仅限于该类。因此,它不会覆盖子类,并将执行基类的方法。private
方法不会被继承。当您调用printParent
时,您将e在父对象上调用方法,当该方法引用this
时,它引用的是该类的实例(父对象
),它有自己的printChild
方法。将Parent#printChild
aprotected
方法制作成一个protected
方法应该会得到预期的结果。在本程序中,我们必须记住两点:
如果我们为一个子类(这里是子类)创建一个对象然后还为超类创建了内存。这意味着,如果我们正在调用的方法在子类中找不到,那么Java虚拟机将转到父类,检查我们正在调用的方法,如果找到该方法,它将执行。如果在子类中找到该方法,它将不会转到父类。
private
、static
和final
方法不能被重写
使用受保护的非私有方法,因为该方法的作用域是私有的,它对其他类不可见。这是因为子类
没有打印父类
方法是的,但当我调用它时,它确实有printChild方法。printChild()它应该是子方法,不是吗?私有方法不能被重写。而且,Private
方法不能直接从其他类调用。您没有犯错误吗?Protected必须放在父类中吗?
public class Parent {
public void printParent()
{
System.out.println("I am the Parent");
System.out.println("----this is ::---" + this);
this.printChild();
}
private void printChild()
{
System.out.println("This is my child");
}
}
public class Child extends Parent {
private void printChild()
{
System.out.println("I am the child");
}
}
public class RelationshipTester {
@Test
public void testRelation()
{
Child parent = new Child();
parent.printParent();
}
}
public class Child extends Parent {
protected void printChild(){
System.out.println("I am the child");
}
}