gpt4 book ai didi

Java : How to set parent and grandparent member variables with best coding practice

转载 作者:行者123 更新时间:2023-11-30 05:51:27 26 4
gpt4 key购买 nike

我有3节课

Class A{
int a;
int b;

public A(){}

public A(int a, int b){
this.a = a;
this.b = b;
}
}

Class B extends Class A{
int c;
int d;
public B(){}

public B(int c, int d){
this.c = c;
this.d = d;
}
}

Class C extends Class B{
int f;
public C(int f){
this.f = f;
}
}

现在,我从某处接收到 B 的对象(设置了 a、b、c 和 d 值)以及 f 的值,并且我想创建一个设置了所有值的 C 的新实例。因此,我在 C 类中创建了一个新的构造函数

Class C extends Class B{
int f;
C(int f){
this.f = f;
}
C(int f, B bInstance){
super(bInstance);
this(f); // because I wanted to only one base constructor
}
}

在 B 中添加构造函数

Class B extends Class A{
int c;
int d;
B(int c, int d){
this.c = c;
this.d = d;
}
B(B bInstance){
super(B.getA(), B.getB());
this(B.getC(), B.getC());
}
}

现在,this() 和 super() 都需要是第一个语句。因此,我不能这样。我这样做的本意是只保留一个基本构造函数,而每个其他构造函数都调用这个构造函数。这是支持此的链接 Best way to handle multiple constructors in Java .

否则,简单的解决方案是在类 C 和 B 中添加一个新的构造函数

Class C extends Class B{
int f;
C(int f){
this.f = f;
}
C(int f, B bInstance){
super(bInstance);
this.f = f;
}
}

Class B extends Class A{
int c;
int d;
B(int c, int d){
this.c = c;
this.d = d;
}
B(B bInstance){
super(B.getA(), B.getB());
this.c = c;
this.d = d;
}
}

但是,我正在尝试学习最好的编码标准,并想知道如何通过最佳编码实践来实现它。

最佳答案

您正在创建一个扩展 B 的类 C,如果我理解正确的话,您希望 C 具有您通过其他方式获得的某个类 B 的值。

当你扩展一个类时,你需要在第一行调用super()来调用父类(super class)的构造函数。因此,您的方法(例如在 B 类中)应具有参数 B(int c, int d)

B(int a, int b, int c, int d) {
super(a, b);
this.c = c;
this.d = d;
}

如果您不这样做,您将收到编译器错误,因为您正在扩展的类具有您从未调用的构造函数。

我会像这样格式化它......

class A {
private int a, b;

public A(int a, int b) {
this.a = a;
this.b = b;
}
}

class B extends A {
private int c, d;

public B(int a, int b, int c, int d) {
super(a, b);
this.c = c;
this.d = d;
}
}

class C extends B {
private int f;

public C(int a, int b, int c, int d, int f) {
super(a, b, c, d);
this.f = f;
}
}

因此,当您实例化一个类C时,您也许应该调用new C(B.getA(), B.getB() ..etc)

关于Java : How to set parent and grandparent member variables with best coding practice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53840832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com