Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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,在此代码中: public abstract class Bird { private void fly() { System.out.println("Bird is flying"); } public static void main(String[] args) { Bird bird = new Pelican(); bird.fly(); } } class Pelican extends Bird

在此代码中:

public abstract class Bird {
    private void fly() {
        System.out.println("Bird is flying");
    }

    public static void main(String[] args) {
        Bird bird = new Pelican();
        bird.fly();
    }
}

class Pelican extends Bird {
    protected void fly() {
        System.out.println("Pelican is flying");
    }
}

请解释为什么这个输出是“Bird is flying”,因为私有成员不是继承的,而且我在Bird中有一个Pelican实例?

当引用类型是Bird时,对象只能访问Bird类中的方法,尽管它是Pelican类型。引用类型始终表示约束,不能访问子类等字段。

您不能重写
private
方法。出于某种原因,我对这种编译方式感到惊讶。您并没有从继承的类重写fly方法。这不是关于我是否重写了什么,而是关于Pelican实例如何获取其父级的私有代码……总结我假设的所有注释-Bird reference不允许Pelican实例到达其自己的fly()方法,这只是因为调用了Bird类私有Bird类方法fly()中的main()方法。另外,若父类中的访问修饰符将受到保护,那个么父方法将被覆盖,子版本将被调用。我说的对吗?引用被指定为PelicanBird bird=new Pelican():bird是对对象的引用,类型为bird。鹈鹕是存储在内存中的对象类型。引用和对象之间有区别。是的
bird
被定义为
bird
,但多态性通常不是这样工作的。在本例中,之所以如此是因为基类的方法被定义为
private
,但这不是规范。如果该方法是
public
protected
的话,即使
bird
被定义为
bird
我明白你的意思,它也会打印
鹈鹕在飞。很抱歉,为了避免进一步的混淆,我将删除。概念1:-当您创建私有方法时,它只能在类中访问。它不能继承。概念2:-这里的代码private void fly(){System.out.println(“Bird is flying”);}无法继承。因此,
Pelican
类中的代码不是继承的,它被视为
Pelican
类自己的方法。受保护的void fly(){System.out.println(“鹈鹕正在飞翔”);}