public static void main(String[] args) { printIdea(new Idea()); } public static void printIdea(Idea idea) { System.out.println(Idea.getDescription()); // this won't work - "Cannot make a static reference to the non-static method } // System.out.println(idea.getDescription()); is working fine public static class Idea { public String getDescription() { return "Amigo"; } } } What's the difference between calling the getDescription() method of the Idea class with lower case and upper case? Can't figure this out, could someone help me please or provide a relavant article/link? This below is also working fine, but does not match the task condition (I changed the getDescription() method to static and called the getDescription() method with the upper case Idea): public static void main(String[] args) { printIdea(new Idea()); } public static void printIdea(Idea idea) { System.out.println(Idea.getDescription()); } public static class Idea { public static String getDescription() { return "Amigo"; } } }