Java重新定义自身中的类
我意识到这可能是一个愚蠢的问题,但我以前从未遇到过这个问题。下面的摘录声明了一个类。但是我不知道为什么或者不理解为什么这个类在其自身中被重新声明 我仍在学习Java的细节,因此非常感谢您的帮助。我也知道我可能会使用不正确的术语,因为我对Java的细节一无所知。请纠正我的无知Java重新定义自身中的类,java,Java,我意识到这可能是一个愚蠢的问题,但我以前从未遇到过这个问题。下面的摘录声明了一个类。但是我不知道为什么或者不理解为什么这个类在其自身中被重新声明 我仍在学习Java的细节,因此非常感谢您的帮助。我也知道我可能会使用不正确的术语,因为我对Java的细节一无所知。请纠正我的无知 public class TouchExampleView extends View { private Drawable mIcon; private float mPosX; private fl
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
调用。它是对超类构造函数的调用,在本例中是视图列出了3个构造函数,称为构造函数重载(方法重载的子集)。每一个都是有效的,但最后一个是“主”构造函数,前两个构造函数链接到该构造函数,并为省略的参数提供默认值
在此创建实例的代码可以选择用于创建此类新实例的构造函数。准确地说,重载构造函数。感谢您的解释。我不完全理解为什么我发布的摘录是这样构建的,但我现在至少可以研究它在做什么。