我的代码有点像这样
class A
{
int a;
A()
{
//Here I want to print B or C
System.out.println("Enter the value of a");
a= new Scanner(System.in).nextInt();
}
}
class B extends A
{
int b;
B()
{
//Here i can't write print B
super();
System.out.println("Enter the value of b");
b= new Scanner(System.in).nextInt();
}
}
}
class C extends A
{
int c;
C()
{
//Here i can't write print C
super();
System.out.println("Enter the value of C");
c= new Scanner(System.in).nextInt();
}
}
//我的主要功能
public static void main(String[] args)
{
B b1= new B();
C c1=new C();
//Some other code
//.....
C c2= new C();
C c3= new C();
B b2= new B();
}
在输出中,我希望它在询问输入之前判断它是B还是C,不好把它添加到main中我相信那么我怎么能用构造函数来做呢?
//Output somewhat like this
Enter values of class B
Enter the value of a
10
Enter the value of b
20
Enter values of class B
Enter the value of a
10
Enter the value of C
25
答案 0 :(得分:1)
如果我理解您的问题,然后是一个可能的解决方案,请将String
传递给A
中的构造函数。像,
class A
{
int a;
A(String msg)
{
System.out.printf("Enter the value of %s%n", msg);
a= new Scanner(System.in).nextInt();
}
}
然后分别使用super("B a");
和super("C a");
。但我建议你将这种方法提取到实用方法中,我不会个人提示在构造函数中输入用户。
答案 1 :(得分:0)
在A中创建受保护的变量,然后您可以覆盖其子类B或C中的值。
class A
{
int a;
protected String type;
A()
{
type = "Class A"
a= new Scanner(System.in).nextInt();
}
}
class B extends A
{
int b;
B()
{
type = "Class B";
b= new Scanner(System.in).nextInt();
}
}
}
答案 2 :(得分:0)
您必须使用java.lang.Class对象在运行时查找类名。
将您的A类修改为:
class A {
int a;
A() {
// Here I want to print B or C
System.out.println(this.getClass().getSimpleName());
System.out.println("Enter the value of a");
a = new Scanner(System.in).nextInt();
}
}
当您实例化B时,它将调用A类的超级构造函数并将B打印为类
的名称答案 3 :(得分:0)
放弃使用构造函数执行输入/输出的任何想法。它永远不会以你喜欢的方式工作。这将是:
public class Main {
static class A {
int a;
public A(int a){
this.a = a;
}
}
static class B extends A {
int b;
public B(int a, int b) {
super(a);
this.b = b;
}
}
static class C extends B {
int c;
public C(int a, int b, int c){
super(a,b);
this.c = c;
}
}
static B getB (Scanner sc){
System.out.println("Enter values of class B...");
System.out.println("Enter value of a:");
int a = sc.nextInt();
System.out.println("Enter value of b:");
int b = sc.nextInt();
return new B(a, b);
}
static C getC (Scanner sc){
System.out.println("Enter values of class C...");
System.out.println("Enter value of a:");
int a = sc.nextInt();
System.out.println("Enter value of b:");
int b = sc.nextInt();
System.out.println("Enter value of c:");
int c = sc.nextInt();
return new C(a, b, c);
}
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
B b1= getB(sc);
C c1=getC(sc);
//Some other code
//.....
C c2= getC(sc);
C c3= getC(sc);
B b2= getB(sc);
}
}