2

次の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

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 に答える
1

それらが同じフォルダーとパッケージにある限り、問題ありません。

ただし、クラスに次の変更を加えます。

  1. Rename Shapeclassto Shape... はすでにクラスであることを知っています。クラス名に「クラス」を入れても価値はありません
  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 に答える
0

ターミナルからパッケージをコンパイルするときは、作業ディレクトリがパッケージが作成されたディレクトリである必要があります。(この場合はデスクトップ)

したがって、C:\ Users \ Desktopにいるときは、を使用してコードをコンパイルし、javac MyShape.*.java 同様にコードを実行します。

于 2012-11-25T05:16:55.433 に答える
0

あなたが言及した

両方のクラスを MyShape という名前の別のフォルダーに入れました

JLSに従って、両方のクラスを同じフォルダーに置くことが必要です

于 2012-11-24T19:21:49.077 に答える
0

基本的な javac を使用している場合、ShapeClass と Triangle の両方のクラスが同じフォルダーにある必要があります。

それらが異なるフォルダにある場合は-d、javac のオプションを使用してディレクトリを指定する必要があります。詳細はこちら:javac

したがって、両方のファイルを同じフォルダー MyShape に保持することをお勧めします

于 2012-11-24T19:24:24.083 に答える
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

1 つのパッケージに含まれる 2 つのクラスのプログラム 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);
         }
}
于 2017-12-22T16:21:28.270 に答える