如何从java

时间:2015-11-10 22:10:25

标签: java inheritance initialization extends

我是一个母亲阶级的生活。

Bd&专辑是来自Livre的两个扩展课程

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

album [] myAlb;

myAlb =新专辑[nbr_of_albums];

myAlb [i] =专辑(1,5,"作者","标题"); //对于一张专辑我称之为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);

    }

}

}

2 个答案:

答案 0 :(得分:0)

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

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

那应该有用。添加static修饰符允许您实例化内部类而不具有封闭类的实例。您将书类作为内部类,这就是您需要static修饰符的原因。

如果您还想要实例化bd课程,您还应该为其static添加。

答案 1 :(得分:0)

您的代码可以重写如下:

public class livre {     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);

    }
}

}

有关嵌套类的更多信息,请访问以下链接: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html