如何从 java 中的扩展 class 启动对象

how to initiate an object from an extended class in java

我有妈妈class里弗。

Bd 和专辑是 Livre

的两个扩展 classes

我在 main() 上遇到问题,我无法从 class 专辑中启动和声明一个对象 (myAlb):这是我所做的:

相册[] myAlb;

myAlb=新专辑[nbr_of_albums];

myAlb[i] = 专辑(1,5,"author","title"); // 对于相册 i 我调用了 album= error

的构造函数

这是错误:没有可访问类型 livre 的封闭实例。必须使用 livre 类型的封闭实例来限定分配(例如 x.new A(),其中 x 是 livre 的实例)。

这是我的完整代码来源:

import java.util.*;

public class livre {

public abstract class book {
    String titre;
    String auteur;
    float prix;
    int nbr_pages;
    book(String titre,String auteur, float prix,int nbr_pages){
        this.titre = titre;
        this.auteur = auteur;
        this.prix = prix;
        this.nbr_pages = nbr_pages;
    }
    abstract void affichage();
}
public class bd extends book {
    String couleur;
    bd(String titre,String auteur, float prix,int nbr_pages,String couleur){
        super(titre,auteur,prix,nbr_pages);
        this.couleur = couleur;
    }
    void affichage(){
        System.out.println("\n\nbook:"+titre);
        System.out.println("+ auteur"+auteur);
        System.out.println("+ prix"+prix);
        System.out.println("+ nbr_pages"+nbr_pages);
        System.out.println("+ "+couleur);
    }

}
public final class album extends book {
    String [] couleur;
    void changerCouleur(){
        int nbr = 0;
        System.out.print("Plz set the nbr of the page that you want to color: ");
        Scanner sc = new Scanner(System.in);
        while (!(nbr<= nbr_pages && nbr > 0 )){ nbr = sc.nextInt();}
        System.out.print("Plz set what color u wanna colorate this page: ");
        couleur[nbr] = sc.nextLine();
        sc.close();
    }
    void affichage(){
        System.out.println("\t\t book:"+titre);
        System.out.println("+ auteur"+auteur);
        System.out.println("+ prix"+prix);
        System.out.println("+ nbr_pages"+nbr_pages);
        System.out.println("+ couleurs des pages: ");
        for(int i=0;i<nbr_pages;i++) System.out.println("   =>Page["+i+"]= "+couleur[i]);
    }
    album(String titre,String auteur, float prix,int nbr_pages){
        super(titre,auteur,prix,nbr_pages);
        couleur = new String[nbr_pages];
    }
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    album[] myAlb; bd[] myBd;

    Scanner sc = new Scanner(System.in);
    System.out.print("Set the nbr of Albums that you want to make: ");
    int nbrAlbum = sc.nextInt();
    myAlb= new album[nbrAlbum];
    System.out.print("Set the nbr of BD that you want to make: ");
    int nbrBd = sc.nextInt();
    myBd= new bd[nbrBd];
    for(int i=0;i<nbrAlbum;i++){
        System.out.print("\tAlbum nbr "+i+": ");
        System.out.print("=>titre = ");
        String titre = sc.nextLine();
        System.out.print("=>auteur = ");
        String auteur = sc.nextLine();
        System.out.print("=>prix = ");
        float prix = sc.nextFloat();
        System.out.print("=>nbr de Pages = ");
        int nbr_pages = sc.nextInt();
        myAlb[i] = new album(titre,auteur,prix,nbr_pages);

    }

}

}

public abstract class book替换为public static abstract class book

并将public final class album extends book替换为public final static class album extends book

应该可以。添加 static 修饰符允许您实例化内部 class 而无需包含 class 的实例。您将书 class 作为内部 class,这就是为什么您需要 static 修饰符。

如果你也想实例化bd class,你也应该为它加上static

您的代码可以重写如下:

publicclass里弗{ public static void main(String[] args) {

    abstract class book {
        String titre;
        String auteur;
        float prix;
        int nbr_pages;
        book(String titre,String auteur, float prix,int nbr_pages){
            this.titre = titre;
            this.auteur = auteur;
            this.prix = prix;
            this.nbr_pages = nbr_pages;
        }
        abstract void affichage();
    }

    class bd extends book {
        String couleur;
        bd(String titre,String auteur, float prix,int nbr_pages,String couleur){
            super(titre,auteur,prix,nbr_pages);
            this.couleur = couleur;
        }
        @Override
        void affichage(){
            System.out.println("\n\nbook:"+titre);
            System.out.println("+ auteur"+auteur);
            System.out.println("+ prix"+prix);
            System.out.println("+ nbr_pages"+nbr_pages);
            System.out.println("+ "+couleur);
        }

    }

    final class album extends book {
        String [] couleur;
        void changerCouleur(){
            int nbr = 0;
            System.out.print("Plz set the nbr of the page that you want to color: ");
            Scanner sc = new Scanner(System.in);
            while (!(nbr<= nbr_pages && nbr > 0 )){ nbr = sc.nextInt();}
            System.out.print("Plz set what color u wanna colorate this page: ");
            couleur[nbr] = sc.nextLine();
            sc.close();
        }
        @Override
        void affichage(){
            System.out.println("\t\t book:"+titre);
            System.out.println("+ auteur"+auteur);
            System.out.println("+ prix"+prix);
            System.out.println("+ nbr_pages"+nbr_pages);
            System.out.println("+ couleurs des pages: ");
            for(int i=0;i<nbr_pages;i++) System.out.println("   =>Page["+i+"]= "+couleur[i]);
        }
        album(String titre,String auteur, float prix,int nbr_pages){
            super(titre,auteur,prix,nbr_pages);
            couleur = new String[nbr_pages];
        }
    }


    album[] myAlb; bd[] myBd;

    Scanner sc = new Scanner(System.in);
    System.out.print("Set the nbr of Albums that you want to make: ");
    int nbrAlbum = sc.nextInt();
    myAlb= new album[nbrAlbum];
    System.out.print("Set the nbr of BD that you want to make: ");
    int nbrBd = sc.nextInt();
    myBd= new bd[nbrBd];
    for(int i=0;i<nbrAlbum;i++){
        System.out.print("\tAlbum nbr "+i+": ");
        System.out.print("=>titre = ");
        String titre = sc.nextLine();
        System.out.print("=>auteur = ");
        String auteur = sc.nextLine();
        System.out.print("=>prix = ");
        float prix = sc.nextFloat();
        System.out.print("=>nbr de Pages = ");
        int nbr_pages = sc.nextInt();
        myAlb[i] = new album(titre,auteur,prix,nbr_pages);

    }
}

}

有关嵌套 class 的更多信息,请遵循以下 link: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html