Operator instanceof

/*
OperatorInstanceOf1.java

Wyrażenie z operatorem instanceof ma postać:

zmiennaReferencyjna instanceof TypReferencyjny

Operator instanceof zwraca wartość true wtedy i tylko wtedy,
gdy zmienna referencyjna jest różna od null, a typ zmiennej
referencyjnej może być zrzutowany do TypReferencyjny w czasie
wykonania programu bez zgłoszenia wyjątku ClassCastException.

Zamiast zmiennej referencyjnej może też pojawić się referencja
pusta null.
*/

public class OperatorInstanceOf1
{
  public static void main(String[] args)
  {
    Punkt2D p1 = new Punkt2D(0,0);
    Punkt3D p2 = new Punkt3D(0,0,0);
    
    System.out.println("p1 = (" + p1.x + "," + p1.y + ")");
    System.out.println("p2 = (" + p2.x + "," + p2.y + "," + p2.z + ")");
    
    System.out.println();
    
    zmienWspolrzedne(p1, 1, 1, 0);
    zmienWspolrzedne(p2, 2, 2, 2);
    
    System.out.println("p1 = (" + p1.x + "," + p1.y + ")");
    System.out.println("p2 = (" + p2.x + "," + p2.y + "," + p2.z + ")");
  }
  
  static void zmienWspolrzedne(Object punkt, int x, int y, int z)
  {
    if (punkt instanceof Punkt2D)
    {
      ((Punkt2D)punkt).x = x;
      ((Punkt2D)punkt).y = y;
    }
    
    if (punkt instanceof Punkt3D)
    {
      ((Punkt3D)punkt).x = x;
      ((Punkt3D)punkt).y = y;
      ((Punkt3D)punkt).z = z;
    }
  }
}

class Punkt2D
{
  int x;
  int y;
  
  Punkt2D(int x, int y)
  {
    this.x = x;
    this.y = y;
  }
}

class Punkt3D
{
  int x;
  int y;
  int z;
  
  Punkt3D(int x, int y, int z)
  {
    this.x = x;
    this.y = y;
    this.z = z;
  }
}
p1 = (0,0)
p2 = (0,0,0)

p1 = (1,1)
p2 = (2,2,2)
Press any key to continue...
/* OperatorInstanceOf2.java */

public class OperatorInstanceOf2
{
  public static void main(String[] args)
  {
    Punkt2D p1 = new Punkt2D(0,0);
    Punkt3D p2 = new Punkt3D(0,0,0);
    
    System.out.println("p1 = (" + p1.x + "," + p1.y + ")");
    System.out.println("p2 = (" + p2.x + "," + p2.y + "," + p2.z + ")");
    
    System.out.println();
    
    zmienWspolrzedne(p1, 1, 1, 0);
    zmienWspolrzedne(p2, 2, 2, 2);
    
    System.out.println("p1 = (" + p1.x + "," + p1.y + ")");
    System.out.println("p2 = (" + p2.x + "," + p2.y + "," + p2.z + ")");
  }
  
  static void zmienWspolrzedne(Punkt2D punkt, int x, int y, int z)
  {
    punkt.x = x;
    punkt.y = y;
    
    if (punkt instanceof Punkt3D)
    {
      ((Punkt3D)punkt).z = z;
    }
  }
}

class Punkt2D
{
  int x;
  int y;
  
  Punkt2D(int x, int y)
  {
    this.x = x;
    this.y = y;
  }
}

class Punkt3D extends Punkt2D
{
  int z;
  
  Punkt3D(int x, int y, int z)
  {
    super(x, y);
    this.z = z;
  }
}
p1 = (0,0)
p2 = (0,0,0)

p1 = (1,1)
p2 = (2,2,2)
Press any key to continue...

Strona główna