繁体   English   中英

Java编程和静态类

[英]java programming and static classes

我试图理解Java中的类和变量系统,但我认为我还没有想到Java ...我设法获得了想要的东西,但我觉得这不是正确的方法。 你能帮我做好吗? 最好的是,我向您展示了一个代码示例:

public class Food {
    static Product tomato = new Product("tomato")

    public static void main(String[] args) {
        Order order = new Order(2);
        System.out.println(order.cost);
    }

    static class Order {
        double cost;

        Order(int nbTomato) {
            cost = tomate.prix * nbTomato;
        }
    }
}

然后在另一个文件中

public class Product {
    String nom;
    double prix;

    public Product(String name_,int price_) {
        name = name_;
        price = price_;
    }
}

理想情况下,我希望在另一个文件中定义“番茄”(以及其他此类变量:eggplant等),并由多个类使用,并且它们将不再进行修改。 它们仍然共享某些字段(价格,名称等),因此它们都应从给定的类派生。

在您的示例中,需要了解以下几点:

  • 番茄将是您的Food类中的静态变量 -这意味着对于任何Food 实例 ,它只会是一个番茄(所有实例中只有一个番茄(它们共享相同的番茄))
  • Food类中有一个静态类 Order

如果您真的想让番茄成为可访问的lika全局变量,最好将其公开声明为:

public static Product tomato = new Product("tomato", 42);

将常量声明为final和大写形式的约定是一种好习惯:

public static final Product TOMATO = new Product("tomato", 42);

可以将其作为食品类别的静态变量进行访问,如下所示:

Product myTomato = Food.TOMATO;

当您说应该可以通过方法顺序访问它时,可以执行以下操作(在anyclass中):

public void order() {
    Product myTomato = Food.TOMATO;
    // Your code here
}

通常在这些情况下,您必须像现实生活中那样思考。 将您的问题想象成现实生活中的情况,您将了解要实施的内容和所需的内容。 例如

您需要能够使用产品。 这意味着有一个Class产品是可以的。 但是,您将能够直接使用产品吗? 还是只使用某种产品的衍生物(橘子,苹果,香蕉)? 这意味着使用“抽象类”。

现在,您使用抽象类,您将永远无法触摸实际的产品,因为您不能拥有它的实例,而只能拥有产品类型的实例。 现在您问自己:我是否需要一种派生(扩展)类Product的水果,并且每种水果都有其自己的特殊特性? 还是我不在乎并认为苹果和橙子都是水果,仅在名称上有所不同。

如果您想拥有一个橙子并且能够调用orange.peel(),并且拥有一个苹果并且能够调用apple.rott(),那么您应该为Apples,Oranges等创建不同的类,每种扩展产品,每个产品内部都有自己的方法。 如果没有,则可以只创建一个类Fruit,扩展产品,并且每个水果都不同于fruit.setName(String name)

现在,您希望能够订购一些东西。 您创建的Order类还可以,但是您永远不会知道如何将一种水果与另一种水果区别开。 因此,您无需创建单独的方法“ orderOranges(number),orderBananas(number)”,而是创建一个接受任何产品的通用方法

order.orderProducts (List<Product> products)

该方法应如下所示

public int orderProducts (List<Product> products) {
    int price = 0;
    for (Product prod : products) {
        price += prod.getPrice();
    }
    return price;
}

这种方法类似于将杂货带到结帐部分。 现在,您可以添加任何所需内容。 数量格式,或您想要的任何格式。

如果您希望能够从程序中的任何位置访问产品,则应该(实际上)创建一个静态类Basket,其中包含产品列表,您可以在其中添加.add(Product),throwOut(Product),您可以将此购物篮发送到结帐单。checkOut(购物篮); 一切都类似于现实的运作方式。 我希望这是您所希望的指导。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM