簡體   English   中英

參數未通過構造函數

[英]Parameter not passed through the constructor

abstract class shape{
    public double volume;
    public double surface;
}

class cube extends shape{

    public static double side;
    public static double newSide;

    cube(double newSide){
        side = newSide;
        }

    public double volume(){
        return side;
    }

    public double surface(){
        return newSide;
    }
}



public class shapes {

    public static void main(String[] args) {


        cube a = new cube(5);
        System.out.println (a.volume);
        System.out.println (a.surface);
    }

}

這會產生:

0.0 0.0

我通過構造函數傳遞的參數似乎沒有被立方體 class 正確處理。

我在這里做錯了什么?

所以我的猜測是你還沒有弄清楚對象是什么。 If you look at the JDK code you will see examples of classes that define objects java.lang.String, java.lang.Integer, java.lang.StringBuilder are classes you can look at to get some idea of what objects are. 一旦您了解其中一些類是如何工作的,您就可以了解 rest 背后的動機。

有對象,也有類。 我們使用類作為模板來創建對象。 每個 object 都有自己的 state。 例如,您的程序中可以有許多不同的字符串。 每個字符串都是一個 object 和自己的 state,使用自己的實例變量。 但是 static 變量不屬於對象,它們屬於 class。

“實例”是指 object 的一次出現。 我們使用構造函數實例化對象。

你的方法喜歡

 public double volume(){

被稱為訪問器或獲取器,因為它們用於訪問 object 的 state。

讓實例方法訪問器訪問 static 變量令人困惑。 Static 成員與實例成員具有不同的 scope 並且在此處將它們組合起來令人困惑。 很難說出它的意圖,但您不應該使用 static 變量來描述應該特定於實例的 state。

您的 static 變量是公共的,並且與訪問器具有相同的名稱。 如果您調用不帶括號的成員,則直接調用變量。 如果您使用括號,您將調用訪問器。 .

如果您確實需要 static 變量,則不要在構造函數中初始化它們。 構造函數用於初始化 class 的實例,其中 static 變量不屬於一個實例,而是屬於 class。 使用構造函數來設置實例變量,而不是 static 變量。

暫無
暫無

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

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