Pertanyaan Paket Java - lihat kelas dari paket yang berbeda


Di (paket default) saya memiliki kelas yang disebut "Burung" yang memiliki metode yang disebut "dialog".

Saya dapat membuat kelas yang disebut Class1 dalam paket yang sama, seperti ini:

public class Class1
{
    public static void main(String[] args) 
    {
        Bird b = new Bird("Alexander",true,5);
        b.dialog("tweet!");
    }
}

Ini benar-benar berfungsi dan saya benar-benar bisa melihat tweet! di konsol.

Pertanyaan saya adalah: apa yang harus saya tambahkan dalam kode jika Class1 terletak di dalam paket Fundamental  (sedangkan kelasnya Bird terletak di "paket default")? Saya mendapatkan kesalahan: "Jenis burung tidak dikenali" dalam kasus ini. Saya mungkin harus menunjukkan paket entah bagaimana.

Pertanyaan sampingan: 1. Apa itu classpath dan bagaimana Anda mengubahnya? Saya telah melihat istilah ini secara samar-samar digunakan dalam konteks beberapa diskusi terkait paket, tetapi tidak ada yang dengan contoh yang jelas seperti yang baru saja saya berikan. 2. Saya telah melihat banyak paket yang disebut xxx.bla.zzz - apakah ini standar? Saya hanya biasanya menggunakan nama umum (bukan tiga dipisahkan oleh.) Saya mengerti sebuah paket adalah pengganti Java untuk ruang nama dalam bahasa lain. Jika ada beberapa solusi solusi yang layak disebut, saya akan menghargai. Terima kasih!


5
2018-01-29 21:35


asal


Jawaban:


Anda tidak boleh menggunakan paket default, ini bukan praktik yang baik dan Anda tidak dapat mengimpor kelas dari paket default. Selalu nyatakan struktur paket Anda.

Di dalam kelas Bird di baris pertama tambahkan:

package animals;

Di baris pertama Class1.java Anda tulis nama paket Anda

package foo;

import animals.Bird;

Perhatikan bahwa untuk ini bekerja kelas Bird dan kelasnya Class1 masing-masing harus dalam folder "hewan" dan folder "foo"


10
2018-01-29 21:39



Menurut JLS (Bab 7.5. Deklarasi Impor http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.5) tidak mungkin untuk mengimpor dari paket default (tanpa nama)

Suatu jenis dalam paket yang tidak disebutkan namanya (§7.4.2) tidak memiliki nama kanonik, sehingga persyaratan untuk nama kanonik dalam setiap jenis deklarasi impor menyiratkan bahwa (a) jenis dalam paket yang tidak disebutkan namanya tidak dapat diimpor, dan (b) anggota statis jenis dalam paket yang tidak disebutkan namanya tidak dapat diimpor. Dengan demikian, §7.5.1, §7.5.2, §7.5.3, dan §7.5.4 semua memerlukan kesalahan waktu kompilasi pada setiap upaya untuk mengimpor tipe (atau anggota statisnya) dalam paket yang tidak disebutkan namanya. 


3
2018-01-30 01:14



Solusi yang ditawarkan sejauh ini bermanfaat tetapi jika Anda menggunakan NetBeans, cukup mudah untuk menyelesaikan masalah. Pergi ke proyek klik kanan dan pilih buka paket baru. NetBeans memberi Anda Dialog untuk membuat paket baru. Di sinilah triknya, CATATAN: pastikan nama proyek baru Anda tidak dimulai dengan nama yang sama dengan paket lain sehingga paket baru akan diidentifikasi secara unik. Berikan paket baru nama yang berbeda misalnya

newPackage;

Anda kemudian dapat menggunakan pernyataan impor pada file kelas yang Anda harapkan untuk menggunakan paket dalam:

import newPackage.SecondClass;

Anda dapat benar-benar menggunakan kode ctr + spaceBar untuk memastikan paket terlihat dengan baik.

Saya berharap ini cukup sederhana. lihat screenshot ini


2
2018-02-29 17:33