我对下面的代码有疑问。
当我运行该项目时,在调用 ImprimirDatos()
时标记错误方法,错误提示:
cannot find symbol. symbol: method ImprimirDatos(). location: class Articulo.
我在子类deRevista
中写了该方法。我不明白为什么要求该方法位于基类中。
注意:如果您在我的代码中发现一些不寻常的内容,请随时“更正”它,我在这个主题上是全新的。
interface ImprDatos
{
String ImprimirDatos();
}
class Autor
{
private String nombre;
private String adscripcion;
Autor(String nombre,String adscripcion)
{
this.nombre=nombre;
this.adscripcion=adscripcion;
}
String getNombre()
{
return nombre;
}
String getAdscripcion()
{
return adscripcion;
}
void setNombre(String nombre)
{
this.nombre=nombre;
}
void setAdscripcion(String adscripcion)
{
this.adscripcion=adscripcion;
}
}
abstract class Articulo
{
private String nombre;
private Autor autores[]=new Autor[4];
private String fechaPublicacion;
private int codigo;
Articulo(String nombreArt,String fechaPublicacion, String nombre,String adscription,String nombre1,String adscripcion1,int codigo)
{
this.nombre=nombreArt;
this.fechaPublicacion=fechaPublicacion;
autores[0]=new Autor(nombre,adscripcion);
autores[1]=new Autor(nombre1,adscripcion1);
autores[2]=new Autor(nombre,adscripcion);
autores[3]=new Autor(nombre1,adscripcion1);
this.codigo=codigo;
}
Articulo()
{
}
String getNombre()
{
return nombre; //del articulo
}
String getfechaPublicacion()
{
return fechaPublicacion;
}
int getCodigo()
{
return codigo;
}
String getAutores()
{
String c=null;
c=autores[0].getNombre()+" "+autores[0].getAdscripcion()+"
"+autores[1].getNombre()+" "+autores[1].getAdscripcion();
return c;
}
void setAutores(Autor[] autores)
{
this.autores = autores;
}
void setNombre(String nomArt)
{
nombre=nomArt;
}
void setfechaPublicacion(String fechaPublicacion)
{
this.fechaPublicacion=fechaPublicacion;
}
void setcodigo(int cod)
{
codigo=cod;
}
}
class deRevista extends Articulo implements ImprDatos
{
private String nomRevista;
private int añoEdicion;
deRevista(){}
deRevista(String nombreArt,String fechaPublicacion, String
nombre,String adscripcion,String nombre1,String adscripcion1,String
nomRevista,int añoEdicion,int codigo)
{
super(nombreArt,fechaPublicacion,nombre,adscripcion,nombre1,adscripcion1,
codigo);
this.añoEdicion=añoEdicion;
this.nomRevista=nomRevista;
}
void setañoEdicion(int nom)
{
añoEdicion=nom;
}
int getañoEdicion()
{
return añoEdicion;
}
void setnomRevista(String nom)
{
nomRevista=nom;
}
String getnomRevista()
{
return nomRevista;
}
public String ImprimirDatos()
{
return " Nombre del articulo: " + getNombre() + " Nombre de la
revista: " + getnomRevista()
+ " Año de edicion: " + getañoEdicion() + " Autores: " +
getAutores() + " Codigo: " + getCodigo() + " Fecha de
publicacion: "
+ getfechaPublicacion();
}
}
class deCongreso extends Articulo implements ImprDatos
{
private String nomCongreso;
deCongreso(){}
deCongreso(String nombreArt,String fechaPublicacion, String
nombre,String adscripcion
,String nombre1,String adscripcion1,String nomCongreso,int
codigo)
{
super(nombreArt,fechaPublicacion,nombre,adscripcion,nombre1,adscripcion1,codigo);
this.nomCongreso=nomCongreso;
}
void setnomCongreso(String nom)
{
nomCongreso=nom;
}
String getnomCongreso()
{
return nomCongreso;
}
public String ImprimirDatos()
{
return "Nombre del articulo: " + getNombre() + " Nombre de la
revista: " + getnomCongreso()
+ " Autores: "+getAutores() + " Codigo: " + getCodigo() + "
Fecha de publicacion: "
+ getfechaPublicacion();
}
}
public class Articulo17ago
{
public static void main(String[] args)
{
Scanner x=new Scanner(System.in);
String au1[]=new String[4];
String ads1[]=new String[4];
Articulo y[]=new Articulo[4];
//ARTICULO DE REVISTA:
for(int i=0;i<2;i++)
{
System.out.println("Introduzca el nombre del articulo");
String art=x.nextLine();
System.out.println("Introduzca el nombre de la revista");
String rev=x.nextLine();
System.out.println("Introduzca el año de edicion");
int año=x.nextInt();
System.out.println("Introduzca el codigo ISSN");
int cod=x.nextInt();
System.out.println("Introduzca la fecha de publicacion");
x.nextLine();
String fec=x.nextLine();
for(int k=0;k<2;k++)
{
System.out.println("Introduzca el nombre del autor");
au1[k]=x.nextLine();
System.out.println("Introduzca la adscripcion del autor");
ads1[k]=x.nextLine();
}
y[i]=new deRevista(art,fec,au1[0],ads1[0],au1[1],ads1[1],rev,año,cod);
}
for(int i=0;i<2;i++)
System.out.println("Datos: "+y[i].ImprimirDatos());
//ARTICULO DE CONGRESO:
for(int i=2;i<4;i++)
{
System.out.println("Introduzca el nombre del articulo");
String art=x.nextLine();
System.out.println("Introduzca el nombre del congreso");
String rev=x.nextLine();
System.out.println("Introduzca el codigo ISBN");
int cod=x.nextInt();
System.out.println("Introduzca la fecha de publicacion");
x.nextLine();
String fec=x.nextLine();
for(int k=2;k<4;k++)
{
System.out.println("Introduzca el nombre del autor");
au1[k]=x.nextLine();
System.out.println("Introduzca la adscripcion del autor");
ads1[k]=x.nextLine();
}
y[i]=new deCongreso(art,fec,au1[2],ads1[2],au1[3],ads1[3],rev,cod);
}
for(int i=2;i<4;i++)
System.out.println("DATOS: " + y[i].ImprimirDatos());
}
}
最佳答案
改变
Articulo y[]=new Articulo[4];
至
ImprDatos y[]=new ImprDatos[4];
Articulo[]
数组可以包含任何扩展 Articulo
的内容。由于 Articulo
没有实现 ImprDatos
,因此无法保证所有子类都会实现它,因此编译器不会让您假设该数组中的对象具有 ImprimirDatos
方法。要告诉编译器数组对象必须实现 ImprDatos
,您只需将其声明为 ImprDatos[]
数组即可。
或者,如果所有 Articulo
对象都应该实现 ImprDatos
,您只需将类声明更改为 abstract class Articulo Implements ImprDatos
> 并且不需要进行其他更改。
关于java - 请求基类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45804957/