"banalny" problem z 'Accessor'em'

0

Witam !

Mam prosty programik który oblicza pole powierchni oraz obwóg figur geometrycznych (okręgu i prostokąta). Program działa bardzo dobrze ale po pewnym czasie eksperymentowania z kodem próbuję przypisać wartoś do zmiennej w części main tj. do zmiennej a. Wartość miała pochodzić z "accessor'a" (z góry przepraszam za język obcy ale korzystam z książki angielskojęzycznej): public double getRadius(){return r;}. Problem w tym że nie potrafię dostać się do subclassy i np. zapis Circle.shapes.getRadius nie działa. Operuję na macierzy więc do indeksów w macierzy Shape przypisywane są różne wartości zarówno dla okręgu jak i prostokąta. Jaki zapis byłyby właściw aby wartość została zwrócona do a=... ?

Z góry dzięki za pomoc.

Poniżej kod

public abstract class Shape {
public abstract double area();
public abstract double circumference();
}

	class Circle extends Shape{
			public static final double PI = 3.1415;
			protected double r;				

			public Circle(double r){		
				this.r=r;
			}		
			public double getRadius(){		
				return r;                           --------------------->
			}
			public double area(){			
				return PI*r*r;
			}
			public double circumference(){	
				return 2*PI*r;
			}
	}
	class Rectangle extends Shape{
		protected double w,h;						
		public Rectangle(double w, double h){		
			this.w=w;
			this.h=h;
		}
		public double getWidth(){					
			return w;
		}
		public double getHeight(){					
			return h;
		}
		public double area(){						
			return w*h;
		}
		public double circumference(){				
			return 2*(w+h);
		}

public static void main(String []args){
Shape[] shapes = new Shape[3];
shapes[0] = new Circle(2.0);
shapes[1] = new Rectangle(1.0,3.0);
shapes[2] = new Rectangle(4.0,2.0);
double a=shapes.getRadius(); <----------------------------
double total_area = 0;
double total_circumference = 0;
for(int i=0; i<shapes.length; i++){
total_area+=shapes[i].area();
total_circumference+=shapes[i].circumference();
}
System.out.println("Total area is: " + total_area);
System.out.println("Total circumference is: " + total_circumference);
}

0

Może:
double a = shapes[0].getRadius();

0

shapes to tablica i nie ma metody getRadius(). shapes[0] to już obiekt typu Shape, tutaj dokładnie to typu Circe i możesz go na Circle zrzutować.

Oprócz rzutowania przyda ci się znajomość operatora instanceof.

1 użytkowników online, w tym zalogowanych: 0, gości: 1