<< Chapter < Page Chapter >> Page >

Create and populate an array holding references to audio objects

Listing 2 begins by creating an array capable of holding references to eight audio objects instantiated from subclasses of the AudioSignalGenerator02 class. Note that the type of each element in this array is AudioSignalGenerator02 .

Then Listing 2 populates the array elements with references to eight different audio objects instantiated from those classes. Even though an object may beinstantiated from the class named FMSweep , for example, that object's reference is being stored as type AudioSignalGenerator02 .

Listing 2 . Create and populate an array holding references to audio objects.
AudioSignalGenerator02[] audioObjects = new AudioSignalGenerator02[8];audioObjects[0] = new AudioGraphSinusoidal(audioParams,this.args,melody);audioObjects[1] = new AudioGraphSquareWave(audioParams,this.args,melody);audioObjects[2] = new FMSweep(audioParams,this.args,melody);audioObjects[3] = new SquareWave(audioParams,this.args,melody);audioObjects[4] = new StereoPingpong(audioParams,this.args,melody);audioObjects[5] = new ToneMono(audioParams,this.args,melody);audioObjects[6] = new TonesStereo(audioParams,this.args,melody);audioObjects[7] = new WhiteNoise(audioParams,this.args,melody);

Override an inherited abstract method

The abstract class named AudioSignalGenerator02 declares an abstract method named getMelody . Each subclass of the abstract class must define a concrete version of (override) the inherited abstract method or the subclass itself be declared abstract.

All eight of the subclasses listed in Listing 2 override the getMelody method. The behavior of each overridden version of the method is significantly different from one class to the next.

When the getMelody method is called on a reference to a subclass object that is stored as the superclass type, the resulting behavior isthat of the subclass method and not that of the superclass method. That is runtime polymorphism.

Call the getMelody method on a subclass object selected at random

Listing 3 selects a reference to an audio object at random and calls the getMelody method on the object. As in previous modules, the reference to the byte array returned by the method is saved in the byte[] variable named melody . Unlike before, however, at this point, we don't know what melody was saved there. We only know thatit will be one of eight possible melodies and we won't know which one until we actually play the melody. (At least that would be true if the code in Listing 3 didn't access and print the type of the object pointed to by the random index.)

Listing 3 . Call the getMelody method on a subclass object selected at random.
Random randomGenerator = new Random(); int randomIndex = randomGenerator.nextInt(8);System.out.println("randomIndex = " + randomIndex); System.out.println(audioObjects[randomIndex].getClass());melody = audioObjects[randomIndex].getMelody();

Some new melodies

The following melodies are new to this module:

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Accessible objected-oriented programming concepts for blind students using java. OpenStax CNX. Sep 01, 2014 Download for free at https://legacy.cnx.org/content/col11349/1.17
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Accessible objected-oriented programming concepts for blind students using java' conversation and receive update notifications?

Ask