扩展类时使用super()的区别

时间:2019-01-12 23:04:01

标签: javascript class extends

我正在学习有关创建新类,扩展它和子类化的知识。我不理解以下内容:

  • 为什么在示例#2中扩展类时,constructor()super()都使用length作为参数?
  • 如果示例2中的super()应该访问父类Polygon,则不应将其用作参数heightwidth在Polygon类中而不是{ {1}}(就像示例4一样)?如果没有,为什么?

源代码为:https://googlechrome.github.io/samples/classes-es6/index.html

length

1 个答案:

答案 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构造函数,该构造函数需要两个参数superheight。在width构造函数中,它们是相同的-Square变量,因此调用

length

示例4有所不同,因为它是super(length, length); ,而不是Rectangle。矩形接受两个参数,即高度和宽度,就像多边形一样,因此Square构造函数和Rectangle构造函数都用Polygon调用,而(height, width)调用反映了

super