0

我试图在java中编译它并得到这个错误:错误:类Miclass中的构造函数Miclass不能应用于给定类型。发生了什么?

class Miclass {
    public int x;
    private int y;
    protected int z;

    public Miclass(int x, int y, int z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
}

public class A extends Miclass {
    public static void main(String [] args) {
            Miclass m_class = new Miclass(2, 4, 8);
            System.out.println("m_class.x = " + m_class.x);
            System.out.println("m_class.y = " + m_class.y);
            System.out.println("m_class.z = " + m_class.z);
    }
}
4

3 回答 3

3

由于已经定义了一个构造函数,Miclass您需要添加一个构造A函数,在超类中调用此构造函数:

public class A extends Miclass {
    public A(int x, int y, int z) {
        super(x, y, z);
    }

    // methods/fields specific to `A`
    ...
}

此更改后代码将无法编译,因为该变量yA. 要允许代码编译,您可以添加一个 getter 方法来访问该变量。

于 2013-06-12T02:25:41.363 回答
1

我已经更正了你的代码,试试这个,然后阅读我的解释..

  class Miclass {
        public int x;
        private int y;
        protected int z;

        public Miclass(int x, int y, int z) {
            this.x = x;
            this.y = y;
            this.z = z;
        }

        public int getY()
        {
            return y;
        }

    }

    public class A {
        public static void main(String [] args) {
                Miclass m_class = new Miclass(2, 4, 8);
                System.out.println("m_class.x = " + m_class.x);
                System.out.println("m_class.y = " + m_class.getY());
                System.out.println("m_class.z = " + m_class.z);
        }
    }
于 2013-06-12T02:30:37.920 回答
0
  • 仅当没有定义其他构造函数时,Java 才提供默认的无参数构造函数
  • 在这种情况下,您已经为 Miclass 类定义了一个带有 3 个 int 参数的构造函数,并且您没有从扩展 Miclass 的类 A 中调用它
  • 因此,当为 A 类提供默认的无参数构造函数时,将完成对超级无参数的调用,这是不可能的,因为您在 Miclass 中没有无参数构造函数
  • 要解决这些问题,您要么必须在超类中创建一个无参数构造函数,要么创建一个具有 3 个 int 参数的构造函数。
  • 您的变量在 A 类中也不可见,因为私有变量仅在同一个类中可见
于 2013-06-12T02:47:33.013 回答