我正在学习Java中的抽象类,我对这个错误有点问题: 不能访问类型为zad_II_1的封闭实例。必须使用zad_II_1类型的封闭实例限定分配(例如x.new A(),其中x是zad_II_1的实例)。 我做错了什么? 这是代码:
public class zad_II_1 {
abstract class Pacjent{
String imie;
Pacjent(String imie){
this.imie=imie;
}
abstract String nazwiskoo();
abstract String PodajChorobe();
abstract String PodajLek();
String nazwisko(){
return imie;
}
String choroba(){
return PodajChorobe();
}
String leczenie(){
return PodajLek();
}
}
class ChoryNaGlowe extends Pacjent{
ChoryNaGlowe(String imie){
super(imie);}
String nazwiskoo(){
return imie;
}
String PodajChorobe(){return "glowa";}
String PodajLek(){return "aspiryna";}
}
class ChoryNaNoge extends Pacjent{
ChoryNaNoge(String imie){
super(imie);}
String nazwiskoo(){
return imie;
}
String PodajChorobe(){return "noga";}
String PodajLek(){return "gips";}
}
class ChoryNaDyspepsje extends Pacjent{
ChoryNaDyspepsje(String imie){
super(imie);}
String nazwiskoo(){
return imie;
}
String PodajChorobe(){return "dyspepsja";}
String PodajLek(){return "wegiel";}
}
public static void main(String[] args) {
Pacjent[] pacjenci = { new ChoryNaGlowe("Janek"),
new ChoryNaNoge("Edzio"),
new ChoryNaDyspepsje("Marian")
};
for (Pacjent p : pacjenci) {
System.out.println("Pacjent: " + p.nazwisko() + '\n' +
"Chory na: " + p.choroba() + '\n' +
"Zastosowano: " + p.leczenie() +"\n\n"
);
}
}
}
答案 0 :(得分:0)
你所有的内在阶级都需要是静态的。
static abstract class Pacjent
和
static class ChoryNaGlowe extends Pacjen
等...
答案 1 :(得分:0)
当然,您可以制作内部课程static
。
或者,您需要有zad_II_1
的实例来创建内部类:
zad_II_1 z = new zad_II_1();
z.new ChoryNaGlowe("Janek")
答案 2 :(得分:0)
或者您可以将所有内容移出main方法,因为使用“new inner class instance”调用非常混乱。
public main(String... args) {
zad_II_1 z = new zad_II_1();
z.doExercise();
}
private void doExercise() {
// copied from the old main().
// Just use new CherryNaGlowe(...), etc.
}
通常,尽可能尝试使用静态内部类。有时人们会长时间将内部类存储在其他对象中。如果系统可以访问内部类,则外部类也是自动的,这是泄漏内存的一种方法。