需要从特定类调用方法

时间:2014-01-30 14:08:56

标签: java class

我只需要从Service类调用方法getAmount()。我不想添加Purchaser类的值。有没有办法可以从Service类中显式调用该方法?我把**放在了我指的地方。

  package prog24178.assignment;

    import java.util.Scanner;

    public class Assignment3 {

        public static void main(String[] args) {
            Scanner s = new Scanner(System.in);
            final int MAX = 99999; // Max array size. 
            Customer [] cust = new Customer[MAX];
            int choice = 0;
            int cnt = 0;

            double total = 0;

            //loop to choose customer type and create a new object.
            for(cnt=0; cnt < MAX && (choice == 1 || choice ==2 || choice == 0); cnt++){
                System.out.println("For a Service customer type 1, for a Purchaser type 2, to terminate the program press any number besides 1 or 2");
                choice = s.nextInt();
                switch (choice){
                case 1:
                    cust [cnt] = new Service();
                    break;
                case 2:
                    cust [cnt] = new Purchaser();
                    break;
                default:
                    break;
                }
            }
            //loop to print the entries
            for(int i=0; i < cnt; i++){
                if(cust[i]!= null)
                cust[i].showData();
            }
            //loop to print the total for the service objects.**THIS IS LOOP I AM //REFFERING TO
            for(int i=0; i < cnt; i++ ){
                if(cust[i]!= null)
                total = cust[i].getAmounts() + total;
            }
                System.out.println("Monthly invoice total: " + total);
                s.close();

        }
    }
    interface Functions {
        public void getData();
        public void showData();
        public double getAmounts();
    }
    abstract class Customer implements Functions {
        protected String name;


    }
    class Purchaser extends Customer {
        protected double payment;

        public Purchaser(){
            getData();
        }

        public void getData() {
            Scanner s = new Scanner(System.in);
            System.out.println("Enter the name of the customer");
            name = s.nextLine();
            System.out.println("Enter payment amount: ");
            payment = s.nextDouble();
        }
        public void showData() {    
            System.out.printf("Customer name: %s Payment amount is: %.2f\n",name,payment);
        }

//**I DO NOT WANT TO CALL THIS METHOD   
        public double getAmounts(){
            return this.payment; 
        }
    }
    class Service extends Customer {
        protected String date;
        public double amount;
        public Service () {
            getData();
        }

        public void getData() {     
            Scanner s = new Scanner(System.in);
            System.out.println("Enter the name of the customer");
            name = s.nextLine();
            System.out.println("Enter date of Service: ");
            date = s.nextLine();
            System.out.println("Enter the cost of Service: ");
            amount = s.nextDouble();
        }
        public void showData() {
            System.out.printf("Customer name: %s The date is: %s, the Amount owed is: %.2f\n",name, date, amount);
        }
        //**THIS IS THE METHOD I NEED TO CALL
        public double getAmounts(){
            return this.amount; 
        }
    }

1 个答案:

答案 0 :(得分:1)

检查客户的类型:

if (cust[i] instanceof Service) {
   total = cust[i].getAmounts() + total;
}

它也会自动处理空检查。