如何从 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
我有妈妈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