簡體   English   中英

Java中的重寫方法和繼承

[英]Overriding methods and inheritance in Java

我正在嘗試使用父類Pet和子類Dog和Cat來完成代碼。 寵物類定義變量,子類計算每只寵物可以安全攝入的每種葯物(卡洛芬和醋丙嗪)的數量。

我在主要方法中調用卡洛芬和醋丙嗪方法時遇到問題。 我不知道我做錯了什么。

它返回的卡洛芬和乙酰丙嗪值始終為0.0

import java.util.Scanner;

class Pet {
    String kind;
    double weight;
    double atotalAmount;
    double ctotalAmount;

    public Pet(String startKind, double startWeight) {
        kind = startKind;
        weight = startWeight;
    }

    public String getKind() {
        return kind;
    }

    public void setKind(String newValue) {
        kind = newValue;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double newValue) {
        weight = newValue;
    }

    public double calcCarprofen(double weight) {
        return ctotalAmount;
    }

    public double calcAcepromazine(double weight) {
        return atotalAmount;
    }
}

class Cat extends Pet {
    public Cat(String startKind, double startWeight) {
        super(startKind, startWeight);
    }

    public double calcCarprofen(double weight) {
        double c = 12.0;
        double ccatdose = .25;
        double ctotalAmount = (((weight) / (2.2)) * ((ccatdose) / (c)));
        return ctotalAmount;
    }

    public double calcAcepromazine(double weight) {
        double a = 10.0;
        double acatdose = .002;
        double atotalAmount= (((weight) / (2.2)) * ((acatdose) / (a)));
        return atotalAmount;
    }
}

class Dog extends Pet {
    public Dog(String startKind, double startWeight) {
        super(startKind, startWeight);
    }

    public double calcCarprofen(double weight) {
        double c = 12.0;
        double cdogdose = .5;
        double ctotalAmount = 0.0;
        ctotalAmount = (((weight) / (2.2)) * ((cdogdose) / (c)));
        return ctotalAmount;
    }

    public double calcAzepromazine(double weight) {
        double a = 10.0;
        double adogdose = .03;
        double atotalAmount = 0.0;
        atotalAmount = (((weight) / (2.2)) * ((adogdose) / (a)));
        return atotalAmount;
    }
}

public class Ch7Ex8 {
    public static void main(String[] args) {
        double startWeight;
        String startKind;

        Scanner keyboard = new Scanner(System.in);
        System.out.println("Is this a cat or dog?: ");
        startKind = keyboard.nextLine();
        System.out.println("Please enter the pet's weight: ");
        startWeight = keyboard.nextDouble();

        Cat usersCat = new Cat(startKind, startWeight);
        Dog usersDog = new Dog(startKind, startWeight);

        double catcdose = usersCat.calcCarprofen( double weight);
        double catadose = usersCat.calcAcepromazine( double weight);
        double dogcdose = usersDog.calcCarprofen( double weight);
        double dogadose = usersDog.calcAcepromazine( double weight);
        System.out.println("The total cat carprofen dose is: " + catcdose);
        System.out.println("The total cat acepromazine dose is: " + catadose);
        System.out.println("The total dog carprofen dose is: " + dogcdose);
        System.out.println("The total dog acepromazine dose is: " + dogadose);
    }
}    

不確定這是否是唯一的問題,但您應該更改

    double catcdose=usersCat.calcCarprofen(double weight);
    double catadose=usersCat.calcAcepromazine(double weight);
    double dogcdose=usersDog.calcCarprofen(double weight);
    double dogadose=usersDog.calcAcepromazine(double weight);

    double catcdose=usersCat.calcCarprofen(weight);
    double catadose=usersCat.calcAcepromazine(weight);
    double dogcdose=usersDog.calcCarprofen(weight);
    double dogadose=usersDog.calcAcepromazine(weight);

而且,如果您打算將weight變量傳遞給這些方法,則必須給它一個初始值。 也許您打算代替傳遞startWeight

再看一遍,也許這些方法根本不需要weight參數,因為您已經將weight傳遞給了構造函數並將其存儲在實例的成員中。

另外,請確保正確使用方法名稱。 我看到calcAzepromazine在一些地方和calcAcepromazine別人。

您不會以這種方式調用方法

Pet.
    double catcdose=usersCat.calcCarprofen(double weight);

應該是

double catcdose=usersCat.calcCarprofen(weight);

這是代碼:

    public class Ch7Ex8 {
public void Ch7Ex8 () {

}

public static void main(String [] args) {


    double startWeight;
    String startKind;
    double weight=0;

    Scanner keyboard= new Scanner(System.in);

    System.out.println("Is this a cat or dog?: ");
        startKind=keyboard.nextLine();
    System.out.println("Please enter the pet's weight: ");
        startWeight= keyboard.nextDouble();

        if (startKind=="cat" || startKind=="Dog") {
            Pet usersPet=new Pet(startKind, startWeight);
            Cat usersCat= new Cat(startKind, startWeight);
            double catcdose=usersCat.calcCarprofen();
            double catadose=usersCat.calcAcepromazine();
            System.out.println("The total cat carprofen dose is: "+catcdose);
            System.out.println("The total cat acepromazine dose is: "+catadose);

        } else if (startKind=="dog" || startKind=="Dog") {
            Pet usersPet=new Pet(startKind, startWeight);
            Dog usersDog= new Dog(startKind, startWeight);
            double dogcdose=usersDog.calcCarprofen();
            double dogadose=usersDog.calcAcepromazine();
            System.out.println("The total dog carprofen dose is: "+dogcdose);
            System.out.println("The total dog acepromazine dose is: "+dogadose);
        }


}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM