java - 请求基类中的方法

标签 java class object inheritance methods

我对下面的代码有疑问。

当我运行该项目时,在调用 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/

相关文章:

Java - 剪辑和循环声音

java - 访问addMouseListener()方法内部的方法

node.js - 从 Node.js 中的另一个自定义模块访问自定义模块的正确路径表示法

java - 如何用 jetty.port 覆盖 jetty.xml

java - 初始化BooleanProperty的2D数组时出现NullPointerException吗?

java - 将 Vorbis SPI 依赖项添加到 Maven 项目

c# - 将 ObservableCollection 保存到隔离存储

javascript - 从 Object.create 获取键

java - 生成不重叠的随机对象

javascript - 从对象中的子对象访问属性