如何在Java中的一个包中使用多个类?

时间:2012-11-24 19:19:40

标签: java

说我有两节课:

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

请帮我解决一下? 从最近几个小时开始就把它放在心上。

7 个答案:

答案 0 :(得分:1)

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

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

  1. Shapeclass重命名为Shape ...我们知道它已经是一个类了。将“class”放在类名中不会增加值
  2. 由于您需要子类来声明area()方法,因此请从print()方法
  3. 中调用
  4. 如果需要,请不要将area值存储在your shape - just call the area()`方法中
  5. 进行这些更改会大大简化您的代码:

    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
        }
    }
    

答案 1 :(得分:0)

您已提及

  

我已将这两个类放在名为MyShape

的单独文件夹中

根据JLS,要求将两个类放在同一个文件夹中

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

  1. 验证文件名是否与类名匹配,正好是每个字母上的大写/小写。

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

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

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

      

    C:\ Users \用户台式机和GT; javac MyShape \ Triangle

答案 4 :(得分:0)

来自C:\ Users \ Desktop ...

javac -cp . MyShape\Triangle.java

如果您不在C:\ Users \ Desktop ...

javac -cp C:\Users\Desktop C:\Users\Desktop\MyShape\Triangle.java

答案 5 :(得分:0)

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

所以当你在 C:\ Users \ Desktop 时,然后使用javac MyShape.*.java编译代码 并以类似方式运行代码。

答案 6 :(得分:0)

单个包中的两个类的程序 这是包含2个类的包的代码: -

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);
         }
}