2

说我有以下两个课程:

package MyShape;

public abstract class Shapeclass {
    public abstract double area(double radius);

    protected void print(double area) {
        System.out.print("Area is:" + area);
    }
}

还有另一个类 Triangle ;

package MyShape;

public class Triangle extends Shapeclass {
    double area;

    public double area(double radius) {
        return radius * radius;
    }

    public void print() {
        super.print(area);
    }
}

我已将两个类放在名为 MyShape 的同一文件夹中但是当我尝试编译 Triangle 类编译器时显示以下错误;

C:\Users\Desktop\MyShape\Triangle.java:3: error: cannot find symbol
public class Triangle extends Shapeclass
                              ^
  symbol: class Shapeclass
C:\Users\Desktop\MyShape\Triangle.java:13: error: cannot find symbol
super.print(area);
^
  symbol:   variable super
  location: class Triangle

请帮我解决?从过去的几个小时开始我就一直在想它。

4

7 回答 7

1

只要它们在同一个文件夹和包中,就可以了。

但是,我将对您的课程进行以下更改:

  1. 重命名ShapeclassShape... 我们知道它已经是一个类了。将“类”放在类名中不会增加任何价值
  2. 由于您需要子类来声明一个方法,请从您的方法area()中调用print()
  3. 如果需要,不要将area值存储在area()` 方法中your shape - just call the

进行这些更改可以大大简化您的代码:

public abstract class Shape {
    public abstract double area(double radius);

    protected void print() { // don't pass anything in!
        System.out.print("Area is:" + area()); // call the area() method
    }
}

public class Triangle extends Shape {
    double radius; // triangles don't have radii, you'll need to store something else

    public double area() {
        return radius * radius; // This is a questionable calculation. fix it
    }
}
于 2012-11-24T19:54:18.280 回答
1

从 C:\Users\Desktop ...

javac -cp . MyShape\Triangle.java

或者,如果您不在 C:\Users\Desktop ...

javac -cp C:\Users\Desktop C:\Users\Desktop\MyShape\Triangle.java
于 2012-11-24T22:20:52.627 回答
0
  1. 验证文件名与名匹配,每个字母的大小写完全一致。

  2. 验证您当前的工作目录 (CWD)是否位于包层次结构的根目录;根据您的编译器输出,即“C:\Users\Desktop”。这样编译器就可以找到包路径“MyShape”作为直接子目录。

  3. 指定完全限定的包\类名 (MyShape\Triangle) 作为要编译的文件名。

因此,将 CWD 显示为提示符和 javac 命令的命令行可能如下所示:

C:\Users\Desktop> javac MyShape\Triangle

于 2012-11-24T19:43:11.263 回答
0

从终端编译软件包时,您的工作目录应该是制作软件包的目录。(在这种情况下是桌面)

因此,当您在C:\Users\Desktopjavac MyShape.*.java中时,请使用 类似的方式编译代码并运行代码。

于 2012-11-25T05:16:55.433 回答
0

你提到过

我已将这两个类放在名为 MyShape 的单独文件夹中

根据JLS,将两个类都放在同一个文件夹中是必需的

于 2012-11-24T19:21:49.077 回答
0

如果您使用基本的 javac,ShapeClass 和 Triangle 类都需要在同一个文件夹中

如果您将它们放在不同的文件夹中,则需要使用-djavac 选项来指定目录。有关详细信息,请参阅此处:javac

因此,建议将两个文件保存在同一个文件夹 MyShape 中

于 2012-11-24T19:24:24.083 回答
0

单个包中的两个类的程序这是具有两个类的包的代码:-

package pack;

class pack_add_sub
{
        public void ad (int x , int y)
              {
              System.out.println("The Add of  "+x+" & "+y+" is :- "+(x+y));
              }
} 

public class pack_add_subb extends pack_add_sub
{
         public void su (int x, int y) 
               {
               super.ad(x,y);
               System.out.println("The Sub of  "+x+" & "+y+" is :- "+(x-y));
               }
}

现在我们编译它并将类文件保存在包名文件夹中。在 bin 文件夹中创建。

现在,这是调用在包中创建的两个类的代码:-

import java.io.*;
import java.util.*;
import pack.pack_add_subb;


class calling_pack_add_subb
{
     public static void main (String arr[])
         {
             int a,b;
             Scanner ob = new Scanner (System.in); 
             System.out.println("Enter the same value for add and sub :-");
             a=ob.nextInt();
             b=ob.nextInt();

             pack_add_subb ob1 = new pack_add_subb ();
             ob1.su(a,b);
         }
}
于 2017-12-22T16:21:28.270 回答