也许很多人都会问这个问题,但我仍然不知道如何得到答案。
我有A,B,C类。
C延伸B,B延伸A。
C类中的主要方法。
如果我想用C类中的参数调用一个构造函数方法,
我该怎么办?
非常感谢你。一个班级
public class A {
public A() {
System.out.println("A construtor");
}
public A(int a, int b)
{
System.out.println("A.a:"+ a + "/B.b:"+b);
}
}
B class
public class B extends A{
public B() {
System.out.println("B construtor");
}
public B(int a, int b) {
System.out.println("B.a:" + a + "/B.b:" + b);
}
}
C class
public class C extends B{
public static void main(String[] str)
{
C c = new C();
}
public C() {
// super(1,2);
// how to call A constructor with parameters
System.out.println("C constructor");
}
}
答案 0 :(得分:1)
C类没有显式扩展A类,只有通过B类C才能扩展A,因此您只能通过B类构造函数访问A的构造函数。
通过在C类构造函数中使用super(1,2),您将调用Class B的构造函数,该构造函数具有两个int参数。您需要将B类的arg构造函数更改为以下内容:
public class B extends A{
public B() {
System.out.println("B construtor");
}
public B(int a, int b) {
super(a,b);
System.out.println("B.a:" + a + "/B.b:" + b);
}
}
请记住以下内容:
1)当没有为类提供构造函数时,java会创建一个默认的非arg构造函数。
2)如果A类扩展了B类,B类需要一个构造函数,并且必须首先调用超类。
答案 1 :(得分:0)
我认为你不能直接来自C.它需要通过在C的构造函数中调用适当的B构造函数来完成。如,
一个班级
public class A {
public A() {
System.out.println("A construtor");
}
public A(int a, int b)
{
System.out.println("A.a:"+ a + "/B.b:"+b);
}
}
B class
public class B extends A{
public B() {
System.out.println("B construtor");
}
public B(int a, int b) {
System.out.println("B.a:" + a + "/B.b:" + b);
}
// ****** added ******
public B(int a, int b, boolean ignore) {
super(a, b);
}
}
C class
public class C extends B{
public static void main(String[] str)
{
C c = new C();
}
public C() {
super(1, 2, true);
System.out.println("C constructor");
}
}
好奇 - 你能给出你为什么要这么做的充分理由吗?