我正在学习有关创建新类,扩展它和子类化的知识。我不理解以下内容:
constructor()
和super()
都使用length
作为参数? super()
应该访问父类Polygon,则不应将其用作参数height
和width
在Polygon类中而不是{ {1}}(就像示例4一样)?如果没有,为什么?源代码为:https://googlechrome.github.io/samples/classes-es6/index.html
length
答案 0 :(得分:2)
有意义的是,正方形仅接受一个自变量-边长之一的长度。但是,如果Square是Polygon的一种类型,则Polygon在这里需要两个参数,即高度和宽度。
如果实例化一个Square,则该Square需要调用Button play36 = (Button)findViewById(R.id.threesix);
Button stop = (Button)findViewById(R.id.stop);
String[] listOfFiles = new String[0];
try {
listOfFiles = getAssets().list("");
final List<String> musicOnlyList = new ArrayList<>();
for(int i = 0; i < listOfFiles.length; i++){
if (getExtension(listOfFiles[i]).equals("mp3"))
musicOnlyList.add(listOfFiles[i]);
}
final MediaPlayer mediaPlayer = new MediaPlayer();
play36.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int itemIndex = new Random().nextInt(musicOnlyList.size());
String file = musicOnlyList.get(itemIndex);
AssetFileDescriptor afd = null;
try {
afd = getAssets().openFd(file);
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.stop();
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
});
} catch (IOException e) {
e.printStackTrace();
}
来运行Polygon构造函数,该构造函数需要两个参数super
和height
。在width
构造函数中,它们是相同的-Square
变量,因此调用
length
示例4有所不同,因为它是super(length, length);
,而不是Rectangle
。矩形接受两个参数,即高度和宽度,就像多边形一样,因此Square
构造函数和Rectangle
构造函数都用Polygon
调用,而(height, width)
调用反映了
super