多态性java错误

时间:2015-02-01 04:04:04

标签: java polymorphism

这是模型类:

public class Test4
{
    public static void main(String []args)
 {
        Rectangle2 one = new Rectangle2(5, 20);
        Box2 two = new Box2(4, 10, 5);

      showEffectBoth(one);
      showEffectBoth(two);
  }

 public static void showEffectBoth(Rectangle2 r)
 {
     System.out.println(r);
 }
}

我正在尝试创建一个与它非常相似的class,但它不起作用。我应该改变什么?我已经创建了所有这些课程。

public class testNew
{
 public void showEffectBoth(Rectangle3 r)
 {
  System.out.println(r);
 }

public static void main (String []args)
{
Rectangle3 one = new Rectangle3(5,20);
Box3 two = new Box3(4,4,4);
Box3 three = new Box3(4,10,5);
Cube3 four = new Cube3(4,4,4);

showEffectBoth(one);
showEffectBoth(two);
showEffectBoth(three);
showEffectBoth(four);
 }
}

当我尝试编译时,它说:illegal start of expression

2 个答案:

答案 0 :(得分:1)

  

您正在尝试使用其参数的常用方法   接受各种类的实例,在这种情况下是一件好事   do正在为所有类实现一个接口。你也可以使用泛型。

public interface CommonInterface
{
  public void doSomeThing();
}

现在为其他类实现它:

public class Box implements CommonInterface
{   
 @Override
 public void doSomeThing(){
  //do some thing;
 }

 //other fields or methods

 }
}
public class Rectangle implements CommonInterface
{   
 @Override
 public void doSomeThing(){
  //do some thing;
 }

 //other fields or methods

 }
}

现在您可以使用以下常用方法:

 public void showEffectBoth(CommonInterface r)
 {
     r.doSomeThing();
 }

你可以这样称呼它:

Rectangle one = new Rectangle(5, 20);
Box two = new Box(4, 10, 5);

showEffectBoth(one);
showEffectBoth(two);

注意:您的界面内部没有任何内容,在这种情况下您也可以拥有例如:

 public void showEffectBoth(CommonInterface r)
 {
     System.out.println(r);
 }

  Rectangle one = new Rectangle(5, 20);
  Box two = new Box(4, 10, 5);

  showEffectBoth(one);
  showEffectBoth(two);

答案 1 :(得分:0)

你在另一个方法中有一个方法 - 你不能用Java做的事情。

public class testNew {
   public static void main (String []args) {
      Rectangle3 one = new Rectangle3(5,20);
      Box3 two = new Box3(4,4,4);
      Box3 three = new Box3(4,10,5);
      Cube3 four = new Cube3(4,4,4);

      showEffectBoth(one);
      showEffectBoth(two);
      showEffectBoth(three);
      showEffectBoth(four);

      // you can't nest this method here
      public void showEffectBoth(Rectangle3 one) {
         System.out.println(one);
      }
   }
} 

您的代码缩进不准确,这会阻止您查看错误。相反,如果你努力缩进你的代码,问题就会立即变得明显,这就是为什么学习和使用适当的缩进非常重要的一个原因。它对于创建良好的代码至关重要。

解决方案:分开你的方法。

其他“侧面”建议,您需要学习并使用Java naming conventions。变量名都应以较低的字母开头,而类名以大写字母开头。遵循这些建议以及遵循良好的代码格式化实践将允许其他人(例如我们!)更好地理解您的代码,更重要的是,将允许您的未来自我更好地理解您在6个月前撰写代码。

另外,请注意错误消息的位置,因为它可能会发生在有问题的嵌套方法的正上方。将来,如果仔细查看编译器错误(和JVM异常)的位置,您将经常发现有问题的代码并能够修复它。