Okay Sven, since that solution kind of opened up a can of worms, I went ahead and repaired all static issues and implemented Perimeter and Area methods in circle. This has been tested with all three shapes and produces correct results. [hider=Shape] import java.util.Scanner; public class Shape { public static String name = "Unknown"; public static double Area = 0; public static double Perimeter = 0; public static void methodName() { System.out.println("Name of Shape: " + name); System.out.println("Area of Shape: " + Area); System.out.println("Perimeter of Shape: " + Perimeter); } public static void main(String[] args) { double length = 0; double width = 0; System.out.println("Greetings! Please enter 1 for Rectangle, 2 for Square, and 3 for Circle: "); Scanner in = new Scanner(System.in); int userInput = in.nextInt(); if(userInput == 1) { System.out.println("Enter length: "); Rectangle em = new Rectangle(length, width); // Rectangle dm = new Rectangle(); // em.calculateArea(); } else if(userInput == 2) { // Rectangle dm = new Rectangle(); Square dm1 = new Square(Area); } else if(userInput == 3) { Circle dm = new Circle(); } } private static void getMethodName() { // TODO Auto-generated method stub } } [/hider] [hider=Rectangle] import java.util.Scanner; public class Rectangle extends Shape { Scanner in = new Scanner(System.in); double length; double width; public Rectangle() { name = "Rectangle"; length = 0; width = 0; System.out.println("Name of Shape: " + name); } public Rectangle(double length, double width) { double tempLength = in.nextInt(); System.out.println("Enter width: "); double tempWidth = in.nextInt(); length = tempLength; width = tempWidth; this.calculateArea(length, width); this.calculatePerimeter(length, width); } public void calculateArea(double length, double width) { Area = length*width; System.out.println("Area of Shape: " + Area); } public void calculatePerimeter(double length, double width) { Perimeter = (2*length) + (2*width); System.out.println("Perimeter of Shape: " + Perimeter); } } [/hider] [hider=Square] import java.util.Scanner; public class Square extends Rectangle { Scanner in = new Scanner(System.in); public static double sideLength; public Square(double sideLength) { System.out.print("Enter Length: "); sideLength = in.nextInt(); length = sideLength; width = sideLength; calculatePerimeter(length, width); calculateArea(length, width); } } [/hider] [hider=Circle] import java.util.Scanner; public class Circle extends Shape { Scanner in = new Scanner(System.in); public static double radius; static double pi = 3.141592; public Circle() { name = "Circle"; radius = 0; System.out.print("Enter Radius: "); radius = in.nextInt(); calculatePerimeter(radius); calculateArea(radius); } public Circle(double radius) { radius = in.nextInt(); } public void calculateArea(double radius) { Area = pi*radius*radius; System.out.println("Area of Shape: " + Area); } public void calculatePerimeter(double radius) { Perimeter = 2*pi*radius; System.out.println("Perimeter of Shape: " + Perimeter); } } [/hider] The only downside is that I don't know what coding practices your class is supposed to follow, but I tried modeling it after what you already had. There are some constructors/methods that do nothing, but those were there before. I tried leaving everything as intact as possible, unless you want me to go in and pull out some of the extraneous stuff.