llamar a un metodo que esta en una clase hacia otra clase

estoy trabajando en net beans 6.9.1, con el libro COMO PROGRAMAR EN JAVA 7 DE deitel &deitel: y estoy teniendo problemas con lo siguiente:
tengo dos proyectos por separado

1-el primero crea el siguiente metodo:
public class Libro
{

public void mostrarMensaje()
{
System.out.println("Bienvenido al Libro de Calificaciones !");
}
}

2- el segundo quiere llamar al metodo de la parte de arriba haciendo lo siguiente:

public class Main {
public class pruebalibro
{

public static void main(String[] args) {
Libro miLibro = new Libro(); ----------------- crea una instancia del objeto
Libro.mostrarMensaje(); aqui quiero llamar al metodo

QUE DEBO HACER PARA SOLUCIONARLO?
EL CODIGO DEL "LIBRO" ESTA MAL?
ESPERO ME PUEDAN AYUDAR con este problema
GRACIAS DE ANTEMANO.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de javadicto

Prueba llamando al metodo de

Prueba llamando al metodo de esta manera: miLibro.mostrarMensaje();

como lo dice javadicto} el

como lo dice javadicto

el código correcto seria
public class Main {
public class pruebalibro
{

public static void main(String[] args) {
Libro miLibro = new Libro(); ----------------- crea una instancia del objeto
miLibro.mostrarMensaje();

}

}

Imagen de Gustavo

RTFS

Te dejo un post muy constructivo de aqui mismo link

no puedo usar el metodo

public static void main(String[] args) -------------inner classes cannot have static declarations
{
Libro Libro1 = new Libro(); -------------------- LA PALABRA Libro SIGUE SALIENDO SUBRAYADO EN ROJO
Libro1.mostrarMensaje(); ------------- AQUI EL METODO MOSTRAR MENSAJE SIGUE SALIENDO SUBRAYADO EN ROJO

CREATE class "libro" en package pruebalibro
CREATE class "libro" en pruebalibro.Main

Imagen de francisco.santiagoj

La clase main

Hola @junior0941, tu clase Main debe estar de esta forma para que pueda llamar al método de otra clase.

package paquete1;

public class Main {
        public static void main(String[] args){
                 Libro libro =  new Libro();
                 libro.mostrarMensaje();
                 }
}

recuerda que deben de estar en el mismo paquete

La clase Libro:

package paquete1;

public class Libro {
        public void mostrarMensaje() {
                System.out.println("Bienvenido al libro de calificaciones");
        }
}

llamando al metodo mostrar mensaje

MUCHAS GRACIAS POR TU RESPUESTA, ESPERO K PUEDAS RESPONDER A ESTAS PREGUNTAS

¿PORQUE LAS 2 CLASES DEBEN ESTAR EN EL MISMO PAQUETE?

¿A QUE SE LLAMA VARIABLE DE INSTANCIA Y VARIABLE DE CLASE?

¿PORQUE SALIA ERROR EN EL CODIGO ANTERIOR? ¿CUAL ERA LA CAUSA DEL PROBLEMA?

ESPERO QUE ME PUEDAS AYUDAR.
SALUDOS DESDE PERU.

Imagen de CharlieCorner

Esto me huele a tarea, pero...

... Siempre hay que otorgar el beneficio de la duda. Aunque déjame decirte que no puedo evitar pensar mal ahora que son épocas de exámenes finales en muchos lugares, ojalá no traiciones nuestra confianza...

Pasando así a tus preguntas:

¿PORQUE LAS 2 CLASES DEBEN ESTAR EN EL MISMO PAQUETE?

No es requisito, aunque para tus ejemplos prácticos ponlos en el mismo, si no lo estuvieran tendrías que hacer un import a las clases que vayas a usar (con todo y el paquete definido). Como seguramente te confundirás ahora con paquetes, sólo mételo todo en el mismo.

¿A QUE SE LLAMA VARIABLE DE INSTANCIA Y VARIABLE DE CLASE?

La variable de instancia, si programaste alguna vez en C, es el equivalente a una variable global. La variable de instancia define todos los atributos de un objeto (instancia) y generalmente se declaran fuera de cualquier método, dentro de la declaración de clase y, por cuestiones de seguridad, es recomendable declararlas como private delegando su manejo exclusivamente a los métodos get y set que para este fin se declaren.

¿PORQUE SALIA ERROR EN EL CODIGO ANTERIOR? ¿CUAL ERA LA CAUSA DEL PROBLEMA?

Entramos con otro concepto, el de un elemento static. Básicamente puedes tener elementos propios a cada uno de los objetos que instancies, pero también puedes tener atributos o métodos que sean comunes a todas las instancias de esa clase.
Ahora bien, de la forma que lo mandabas llamar era Clase.metodo() cosa que sólo hubiera funcionado si hubieras declarado tu método mostrarMensaje() como static, de manera que, como es común a todos los objetos de esa clase, no es, por definición, necesario crear un objeto para accesar a ese método.

Si no te me has perdido hasta aquí, vamos bien. Te comentaban que crearas un objeto de la clase Libro() porque tu método mostrarMensaje() no es estático, es decir, es independiente para cada una de las instancias que de esa clase se creen. De modo que su llamaba sólo será exitosa si y sólo si creas una instancia y luego mandas llamar el método mostrarMensaje() de la misma. Objeto.metodo().

Revisa que hayas copiado correctamente el código del libro. Estoy casi seguro que por ahí te equivocaste en algo, sino, proporcioname la página y lo reviso en el mío para una ayuda más certera.

Espero haberme explicado bien, traté de digerirlo lo más posible para explicártelo lo más sencillo posible, si no, cualquier duda, háznosla saber.

el error era por que tus

el error era por que tus clases estaban en diferentes paquetes . y la solucion a eso era hacer un import .

en la clase main donbe llamas al metodo mostrar mensaje hacer esto

import nombredelpaquetequecontieneelmetodomostrarmensaje .*; nada mas eso es todo y listo.

Imagen de neko069

No

@freddyrrc, después de DOS años de publicado el post, sigue estando correcta la respuesta de @javadicto.