Ciao a tutti,
in questi giorni mi trovo ad affrontare dei problemi dovuti al binding dinamico di Java.
Dato il codice che riporto sotto dovrei riuscire a capire cosa il programma stamperebbe nel caso in cui eseguissi nel main le istruzioni che riporto sotto il codice. Le soluzioni sarebbero:
Point1D.distance
1.0
Point2D.distance
1.4142135623730951
Point1D.distance
0.0
Point2D.distance
Exception in thread "main" java.lang.ClassCastException: Point1D cannot be cast to Point2D
Se poi l’esecuzione proseguisse:
Point1D.distance
1.0
Point2D.distance
1.4142135623730951
Potreste spiegarmi per bene i passaggi di cosa fa il compilatore a run-time e in particolare perché viene generata quell'eccezione alla quarta stampa e non all'ultima?
Grazie mille.
codice:public abstract class Point { public abstract double distance (Point p); } public class Point1D extends Point { private double c1; public Point1D (double c1) { this.c1 = c1; } public double getC1() { return c1; } public double distance (Point p) { return Math.abs(((Point1D) p).getC1()-c1); }} public class Point2D extends Point1D { private double c2; public Point2D (double c1, double c2) { super(c1); this.c2 = c2; } public double getC2() { return c2; } public double distance (Point p) { return Math.sqrt(Math.pow(((Point2D) p).getC1()-this.getC1(), 2) + Math.pow(((Point2D) p).getC2()-this.getC2(), 2)); } public double distance (Point2D p) { return Math.sqrt(Math.pow(p.getC1()-this.getC1(), 2) + Math.pow(p.getC2()-this.getC2(), 2)); }}codice:Point p1 = new Point1D(0.0); Point p2 = new Point1D(1.0); Point p3 = new Point2D(0.0, 1.0); Point p4 = new Point2D(1.0, 0.0); double x; x = p1.distance(p2); System.out.println(x); x = p3.distance(p4); System.out.println(x); x = p1.distance(p3); System.out.println(x); x = p3.distance(p1); System.out.println(x); p1=p3; x = p2.distance(p1); System.out.println(x); x = p4.distance(p1); System.out.println(x);


Rispondi quotando