Java多态性奇怪的行为

时间:2015-02-05 16:48:01

标签: java polymorphism

为什么输出会产生影响? 我需要抽象课吗?我试过了,但它没有用。 我知道c ++,但我是java新手所以我理解这个概念,但我显然做错了。

输出是: 高尔夫球迷你。 Kapacitet:4 Br kotaca:6 高尔夫球迷你。 Kapacitet:4 Br kotaca:6 Mercedes Nosivost:3000t Kapacitet:4 Br kotaca:6

输出应该是: 蒙迪欧je karavan。 Kapacitet:5 Br kotaca:4 高尔夫球迷你。 Kapacitet:3 Br kotaca:4; Mercedes Nosivost:3000t Kapacitet:4 Br kotaca:6

public class apples {
   public static void main(String args[]){
   Vozilo Ford = new Auto(4, 5, "Mondeo", "Karavan");
   Vozilo golf = new Auto(4, 3, "Golf", "Mini");
   Vozilo Kam = new Kamion(6, 4, "Mercedes", 3000);
   Vozilo vozila[] = {golf, Ford, Kam};
   Ford.ispis();
   golf.ispis();
   Kam.ispis();
}
}

class Vozilo

    public class Vozilo {
    private static int brKotaca;
    private  static int brPutnika;

    Vozilo(int br, int br2){
        brKotaca = br;
        brPutnika = br2;
    }

    public static void setBrKotaca(int br){
        brKotaca = br;
    }
    public static int getBrKotaca(){
        return brKotaca;
    }

    public static void setBrPutnika(int br2){
        brPutnika = br2;
    }
    public static int getBrPutnika(){
        return brPutnika;
    }

    public void ispis() {
        System.out.println("Vozilo");
    }

}

class Auto

    public class Auto extends Vozilo {
    private static String ime;
    private static String vrsta;

    Auto(int _brKotaca, int _brPutnika, String _ime, String _vrsta )
    {
        super(_brKotaca, _brPutnika);       
        ime=_ime;
        vrsta=_vrsta;
    }
    public static String getIme(){
        return ime;
    }
    public static String getVrsta(){
        return vrsta;
    }

    public void ispis(){
        System.out.println(ime + " je " + vrsta + ". Kapacitet: " + this.getBrPutnika() + " Br kotaca: " + this.getBrKotaca());
    }
    }
class Kamion

    public class Kamion extends Vozilo {
    private static String ime;
    private static int nosivost;

    Kamion(int _brKotaca, int _brPutnika, String _ime, int _nosivost){
        super(_brKotaca, _brPutnika);       
        ime=_ime;
        nosivost = _nosivost;
    }
    public void ispis(){
        System.out.println(ime + " Nosivost: "  + nosivost +"t "  + " Kapacitet: " + this.getBrPutnika() + " Br kotaca: " + this.getBrKotaca());
    }

}

2 个答案:

答案 0 :(得分:1)

您已将类变量,getter和setter定义为static,这意味着每个类中只有一个,而不是每个实例。

从所有类变量和所有方法中删除static,以便每个对象都获得自己的实例变量。

答案 1 :(得分:0)

  

private static int brKotaca; private static int brPutnika;

通过将这些字段定义为静态,您可以说每个字段的单个实例应该在Vozilo类及其所有子类的所有实例之间共享。因此,每次为brKotaca分配一个值,即所有实例的值。这真的是你想要的行为吗?