簡體   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