Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

 

Code Block
themeEclipse
languagejava
titleAnimal.java
package interfaces;
 
public interface Animal {
     
    public String getName();
    public void setName(String name);
 
	public char getGender();
	public void setGender(char gender);
 
	public boolean getCanSwim();
	public void setCanSwim(boolean canSwim);

}

 

La oss si vi har tre klasser som implementerer Animal-grensesnittet: Dog, Elephant og Clownfish. Selve implementasjonen av disse kan du prøve på selv. Under tar vi for oss noen situasjoner der bruken av Animal-grensesnittet hjelper oss. Disse er forklart i kommentarene i koden.

Code Block
themeEclipse
languagejava
titleNoahsArkProgram.java
package interfaces;

import java.util.ArrayList;

public class NoahsArkProgram {

	private ArrayList<Animal> ark;

	public void init() {

		// Initialiserer ark som en ArrayList med Animal-objekter.
		ark = new ArrayList<Animal>();
		
		// De første tre dyrene som går på arken:
		// (Konstruktøren til hver tar inn hhv. name, gender og canSwim)
		Dog lassie = new Dog("Lassie", 'F', true);
		Elephant dumbo = new Elephant("Dumbo", 'M', false);
		Clownfish nemo = new Clownfish("Nemo", 'M', falsetrue);


		/*
		 * Det går fint å legge til dyrene fordi alle implementerer
		 * Animal-grensesnittet, selv om de er instanser av forskjellige
		 * klasser, henholdsvis Dog, Elephant og Clownfish.
		 */
		ark.add(lassie);
		ark.add(dumbo);
		ark.add(nemo);
	}


	public void run() {


		/*
		 * Siden alle elementene i ark-lista vår er implementasjoner av Animal,
		 * så kan vi trygt bruke metodene som er definert i grensesnittet, uten
		 * å vite noe om hvordan de faktisk er implementert i Dog-, Elephant- og
		 * Clownfish-klassene. Vi trenger ikke vite hvilken type dyr vi kaller metodene
		 * på - de er jo alle Animal-objekter.
		 */
		for (Animal animal : ark) {
			System.out.println(animal.getName());
			System.out.println(animal.getGender());
			System.out.println(animal.getCanSwim());
		}


		/*
		 * Hva om vi ønsker å vite hvilken klasse et Animal er? Er det Dog,
		 * Elephant eller Clownfish? Dette kan gjøres ved å bruke
		 * .getClass().getName():
		 */
		for (Animal animal : ark) {
			System.out.println(animal.getClass().getName());
		}


		/*
		 * getClass kan vi også bruke til å sjekke om et dyr i arken er av en
		 * gitt art. La oss si vi vil skrive ut navnet på alle hunder i arken:
		 * (Merk at man må ha med pakkenavnet)
		 */
		for (Animal animal : ark) {
			if (animal.getClass().getName().equals("interfaces.Dog")) {
				System.out.println(animal.getName() + " is a dog! Bark bark!");
			}
		}


		/*
		 * Det samme kan også gjøres veldig enkelt ved å bruke instanceof:
		 */
		for (Animal animal : ark) {
			if (animal instanceof Dog) {
				System.out.println(animal.getName() + " is a dog! Bark bark!");
			}
		}
	}


	public static void main(String[] args) {
		NoahsArkProgram program = new NoahsArkProgram();
		program.init();
		program.run();
	}
}