我意识到这可能是一个愚蠢的问题,但是我以前从未遇到过。下面的摘录声明了一个类。但是我不知道为什么或不理解为什么在自身内部重新声明该类。
我仍在学习Java的来龙去脉,因此希望对您有所帮助。我也知道我可能会使用错误的术语,因为我对Java的细节一无所知。请纠正我的无知。
public class TouchExampleView extends View {
private Drawable mIcon;
private float mPosX;
private float mPosY;
private float mLastTouchX;
private float mLastTouchY;
public TouchExampleView(Context context) {
this(context, null, 0);
}
public TouchExampleView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public TouchExampleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mIcon = context.getResources().getDrawable(R.drawable.icon);
mIcon.setBounds(0, 0, mIcon.getIntrinsicWidth(), mIcon.getIntrinsicHeight());
}
最佳答案
这些不是重新声明-这些是构造函数定义。这三个定义中的每一个都指定了创建TouchExampleView
实例的方式。例如,在这样的表达式中:
TouchExampleView view = new TouchExampleView(context, someAttrs, style);
其中参数类型与构造函数定义中声明的类型(
Context
,AttributeSet
和int
)匹配,将调用第三个构造函数。如果你写
TouchExampleView view = new TouchExampleView(context, someAttrs);
第二个构造函数将被调用。主体中的
this
调用将使它使用defStyle = 0
运行第三个构造函数。值得注意的另一件事是第三个构造函数中的
super
调用。它是对超类构造函数的调用,在本例中为View
。