首页 > 解决方案 > 声明子类的对象

问题描述

我试图创建子类“smycken”的实例,但它似乎不起作用,因为参数中的“namn”出现错误。

public abstract class Värdesaker {

    String namn;
    double värde;
    double moms = 1.25;

    public static void main(String[] args) {

        Värdesaker v = new smycken(namn, false, 0);

    }

    class smycken extends Värdesaker {

        double vikt, ädelstenar;

        public smycken(String namn, boolean guld, int ädelstenar) {
            this.namn = namn;
            this.ädelstenar = ädelstenar;
            if (guld)
                this.värde = (2000 + (ädelstenar * 500)) * moms;
            else
                this.värde = (500 + (ädelstenar * 500)) * moms;

        }

标签: javaobjectsubclass

解决方案


我已将您的代码修改如下。它似乎工作。需要以下内容

  1. 将访问说明符更改为受保护的超类 Värdesaker 的成员变量(或者您可以提供 getter-setter 以访问私有变量)
  2. 将 smycken 标记为静态
  3. main 方法不能访问非静态、非公共的成员变量。所以你必须实例化你的参数或像以前一样在构造函数中使用创建。

// 修改类

  public abstract class Värdesaker {
  protected String namn;
  protected double värde;
  protected double moms = 1.25;

  public static void main(String[] args)
  {

    Värdesaker v = new smycken("Test", false, 0);

  }

  static class smycken extends Värdesaker
  {

    double vikt, ädelstenar;

    public smycken(String namn, boolean guld, int ädelstenar)
    {
      this.namn = namn;
      this.ädelstenar = ädelstenar;
      if (guld) {
        this.värde = (2000 + (ädelstenar * 500)) * moms;
      } else {
        this.värde = (500 + (ädelstenar * 500)) * moms;
      }

    }
  }
}

推荐阅读