繁体   English   中英

在继承类重写方法中使用基类方法值

[英]Using Base Class Method Value In Inherited Classes Overridden Method

基类;

import java.util.Random;

public class Animal
{

    public void move()
    {
        int value = 0;
        System.out.println("Move");
        Random rand = new Random(); 
        value = rand.nextInt(2)+1;

    }

}

继承类;

public class Cat extends Animal
{

    public void moveCat()
    {
        super.move();
        System.out.println("Move Cat");

    }

    public static void main(String[] args)
    {
        Cat test = new Cat();
        test.moveCat();
    }
}

我试图使用基类动物方法的值移动覆盖方法moveCat。 为什么我不能在Cat的moveCat中使用值“value”。

例如;

public void moveDoodle()
{
    super.move();
    System.out.println("Move Doodle");
    if(value == 1)
    {
        System.out.println("Value from base");
    }

}

如果我从基本方法中获取内容,为什么我也不能使用这些值。 如果它不可能我应该做什么而不是为了获得我需要的值。

那是因为value在你的base( Animal )类的方法move()的局部范围内,这就是为什么它不被继承。 只有实例变量才会被继承(前提是它们不是private )。 因此,你需要做value实例变量让你能够继承它在你的基地( Animal )类。

int value = 0;
public void move()
{
    // int value = 0;
    System.out.println("Move");
    Random rand = new Random(); 
    value = rand.nextInt(2)+1;
}

注意:我可以看到你继承了Animal类但没有覆盖任何方法,这与问题标题中的建议相反。

因为value是方法move()的局部变量。 局部变量不会被继承。 将变量创建为实例变量。 顺便说一句,如果你试图覆盖move()方法,你需要保持相同的方法签名。

import java.util.Random;

public class Animal {
    int value = 0;

    public void move() {

        System.out.println("Move");
        Random rand = new Random();
        value = rand.nextInt(2) + 1;

    }

}

你的猫班

public class Cat extends Animal {
    public void moveCat() {
        super.move();
        System.out.println("Move Cat");

    }

    public static void main(String[] args) {
        Cat test = new Cat();
        test.moveCat();
        System.out.println(test.value);
    }

}

通过实现, value变量具有局部范围。 它只能在move方法中访问,外部世界不知道这一点。

您需要在实例范围内声明此变量,以便在类级别访问它。 您还需要为此声明访问修饰符,以便继承类了解它。

以下将有效。

protected int value = 0;

public void move()
{
    System.out.println("Move");
    Random rand = new Random(); 
    value = rand.nextInt(2)+1;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM