2016-07-07 13 views
1

В настоящее время я работаю над проектом для Java, и учитель не очень хорошо объясняет себя. В настоящее время я застреваю, пытаясь ссылаться на расширенный класс в java, чтобы получить баланс. (Я пытаюсь изменить баланс таким образом, чтобы его можно просматривать и изменять в массиве.Как ссылаться на расширенный подкласс в java?

мой основной счет выглядит следующим образом

public class Account { 
    private String name; 
    private double quantity, price; 
    private double rate; 
    private Asset[] Asset; 
} 

Счет, который удлиняется является

abstract public class Asset { 

    String symbol; 


    public String getSymbol() { 
     return symbol; 
    } 

    protected Asset(String symbol) { 
     this.symbol = symbol; 
    } 

} 

расширения выглядеть так,

public class Cash extends Asset { 

    private double Quantity; 


    public Cash(double Quantity, String symbol) { 
     super(symbol); 
     this.Quantity = Quantity; 
    } 


    @Override 
    public String getSymbol() { 
     return super.getSymbol(); //To change body of generated methods, choose Tools | Templates. 
    } 

    public double getQuantity() { 
     return Quantity; 
    } 

    public void setQuantity(double Quantity) { 
     this.Quantity = Quantity; 
    } 
} 

Теперь давайте говорить у меня есть тестовый экземпляр, созданный из класса Акко ЕНТ. Как я могу изменить значение «Денежные средства» из учетной записи Class? (Main arg) Вот другие расширения, которые у меня есть только для справки.

public class Stock extends Asset { 

    private String name; 
    private double quantity, rate; 


    public Stock(String name, double quantity, double rate, String symbol) { 
     super(symbol); 
     this.name = name; 
     this.quantity = quantity; 
     this.rate = rate; 
    } 



    @Override 
    public String getSymbol() { 
     return super.getSymbol(); //To change body of generated methods, choose Tools | Templates. 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public double getQuantity() { 
     return quantity; 
    } 

    public void setQuantity(double quantity) { 
     this.quantity = quantity; 
    } 

    public double getRate() { 
     return rate; 
    } 

    public void setRate(double rate) { 
     this.rate = rate; 
    } 
} 

Если это помогает, как я могу изменить значения в расширенных классах? Я попытался

Asset[0] = new Cash(25000.00,string); 

, но это полезно только ввод значения вручную. Извинения за любые ошибки, я довольно новичок в кодировании и java в целом.

+0

Более принципиально, не надо. Если вам нужно знать, что ваш 'Cash' является' Cash', то рассматривайте его как «Cash», а не «Asset». – chrylis

+0

Это должно быть одно требование от профессора. – vdefile

+0

Затем используйте предоставленный ответ, но имейте в виду, что это плохой дизайн. – chrylis

ответ

1

, как вы назвали ваш массив активов является запутанным, Java чувствителен к регистру, так назовите его, например:

private Asset[] asset; 

Вы должны получить ссылку правильного типа с помощью литья, прежде чем вы можете получить доступ к его собственной методы , Вы можете сделать, например:

if (asset[0] instanceof Cash) { 
    Cash cash = (Cash)asset[0]; 
    // Then you can access the setQuantity method 
    cash.setQuantity(25000.00); 
} 
+0

Спасибо вам большое! Мне было интересно, как исправить эту страшную проблему! – vdefile

+0

@vdefile, мое удовольствие !!! – alainlompo

+0

User.setQuantity (25000.00); System.out.println (User.getQuantity()); когда я запускаю это, он ничего не отображает (Пользователь является экземпляром класса Account). Интересно, забыл ли я что-то – vdefile