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...