Sobrecarga de métodos

Sobrecarga de métodos en Java

SOBRECARGA

Se denomina sobrecarga en Java al método duplicado en una clase, distinguidos mediante los parámetros incluidos. Es decir, son métodos que comparten el mismo nombre pero pueden realizar procesos distintos y que Java los identifica entre sí por el tipo de parámetro o por la cantidad de parámetros que incluye dicho método.

  1. package miclase;
  2. public class MiClase{
  3. int numero = 2;
  4. String cadena;
  5. public void cambiar(){
  6. numero = 10;
  7. }
  8. public void cambiar(String nombre){
  9. cadena="Hola "+nombre;
  10. }
  11. public void cambiar(int num){
  12. numero = numero + num;
  13. }
  14. public void cambiar(int num,int num2){
  15. numero = numero + num+num2;
  16. }
  17. public static void main(String[] args){
  18. MiClase miclase = new MiClase();
  19. System.out.println(miclase.numero);
  20. miclase.cambiar(20,10);
  21. System.out.println("Java identifica el método por la cantidad de parámetros dados");
  22. System.out.println(miclase.numero);
  23. miclase.cambiar("Jose");
  24. System.out.println(miclase.cadena);
  25. }
  26. }

CONSTRUCTOR

El método constructor es un método inicializador que se ejecuta cada vez que se crea un objeto y es donde se deben asignar todos los valores iniciales. En Java es necesario que el constructor coincida con el nombre de la clase, y como cualquier otro método, admite la sobrecarga permitiendo que una clase contenga más de un constructor.

  1. package miclase;
  2. public class MiClase{
  3. int numero;
  4. String nombre;
  5. public MiClase(){
  6. numero = 10;
  7. nombre = "Jose";
  8. }
  9. public MiClase(String cadena){
  10. nombre = cadena;
  11. }
  12. public static void main(String[] args) {
  13. MiClase miclase = new MiClase("María");
  14. System.out.println(miclase.nombre);
  15. }
  16. }

HERENCIA

Java soporta herencia, concretamente herencia simple   que permite que una clase denominada hijo extienda de otra clase denominada padre. Para ello, es necesario indicar a continuación de la palabra reservada extends, el nombre de la clase de la que va a heredar y así cualquier otra clase disponer de las propiedades y métodos de esta clase. Por defecto la clase hijo toma el constructor del padre si no dispone de uno propio.

clase Padre

  1. package miclase;
  2. public class MiClase{
  3. int numero;
  4. String nombre;
  5. public MiClase(){
  6. numero = 10;
  7. }
  8. public static void main(String[] args) {
  9. Hija hija = new Hija();
  10. System.out.println(hija.numero);
  11. Hijo hijo = new Hijo();
  12. System.out.println(hijo.numero);
  13. }
  14. }

clase Hijo

  1. package miclase;
  2. public class Hija extends MiClase {
  3. String cadena;
  4. }

clase Hijo

  1. package miclase;
  2. public class Hijo extends MiClase {
  3. int numero = 100;
  4. }

POLIMORFISMO

El polimorfismo en Java indica que un mismo método puede tener distintos comportamientos según la clase desde la que es llamado. Para poder entenderlo mejor y manteniendo la estructura del ejemplo anterior es necesario analizar el siguiente código.

La clase MiClase (clase padre) es una clase abstracta que debe estar compuesta por lo menos por un método abstracto obligando a toda clase que extienda de ella a incluir ese método.

clase padre

  1. package miclase;
  2. public abstract class MiClase {
  3. int numero;
  4. String cadena;
  5. public abstract void metodoAbstracto();
  6. public static void main(String[] args) {
  7. Hijo hijo = new Hijo();
  8. Hija hija = new Hija();
  9. hijo.metodoAbstracto();
  10. hija.metodoAbstracto();
  11. }
  12. }

Esta clase abstracta permite a sus clases hijas definir la funcionalidad de dicho método. 

clase hijo

  1. package miclase;
  2. public class Hijo extends MiClase {
  3. @Override
  4. public void metodoAbstracto(){
  5. System.out.println("método desde Hijo");
  6. }
  7. }

clase hija 

  1. package miclase;
  2. public class Hija extends MiClase {
  3. @Override
  4. public void metodoAbstracto(){
  5. System.out.println("método desde Hija");
  6. }
  7. }

STATIC

Definir una variable como estática permite acceder a esa variable sin necesidad de crear un objeto.

  1. package miclase;
  2. public abstract class MiClase {
  3. static String cadena;
  4. public static void main(String[] args) {
  5. System.out.println(MiClase.cadena);
  6. }
  7. }

FINAL

La palabra final es el equivalente a una constante (const) en PHP, es decir, indica que una variable no puede ser modificada.

  1. final int numero = 10;

CASTING

  1. package miclase;
  2. public abstract class MiClase {
  3. public static void main(String[] args) {
  4. double num = 10000.00000;
  5. int numI = (int) num;
  6. System.out.println(numI);
  7. }
  8. }

JDBC

JDBC es considerado un tipo de conexión en Java. Para poder utilizarlo es necesario descargarlo desde la página oficial de MySQL para después desde el propio IDE importarlo  al proyecto. 

SONIDOS

Java dispone de la clase AudioSystem que permite trabajar con archivos de audio. A continuación un ejemplo básico de la reproducción de un sonido. 

  1. package Multimedia;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import javax.sound.sampled.AudioSystem;
  7. import javax.sound.sampled.Clip;
  8. import javax.sound.sampled.LineUnavailableException;
  9. import javax.sound.sampled.UnsupportedAudioFileException;
  10. import javax.swing.BoxLayout;
  11. import javax.swing.JButton;
  12. import javax.swing.JFrame;
  13. import javax.swing.JPanel;
  14. public class Sonido implements ActionListener{
  15. JFrame ventana;
  16. JPanel panel;
  17. JButton botonPlay;
  18. Clip sonido;
  19. public Sonido(){
  20. addPanel();
  21. addFrame();
  22. }
  23. public void addPanel(){
  24. panel = new JPanel();
  25. panel.setSize(120,120);
  26. panel.setLayout(new BoxLayout(panel,BoxLayout.X_AXIS));
  27. botonPlay = new JButton();
  28. botonPlay.setSize(100,100);
  29. botonPlay.setText("Play");
  30. panel.add(botonPlay);
  31. }
  32. public void addFrame(){
  33. ventana = new JFrame();
  34. ventana.setLayout(new BoxLayout(ventana.getContentPane(),BoxLayout.Y_AXIS));
  35. ventana.setTitle("Ventana");
  36. ventana.setSize(600,600);
  37. botonPlay.addActionListener(this);
  38. ventana.add(panel);
  39. ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE);
  40. ventana.setVisible(true);
  41. }
  42. public void actionPerformed(ActionEvent e){
  43. if(e.getSource()==botonPlay){
  44. try{
  45. playAudio();
  46. }catch(IOException | UnsupportedAudioFileException el){
  47. el.printStackTrace();
  48. }catch(InterruptedException el){
  49. el.printStackTrace();
  50. }
  51. }
  52. }
  53. public void playAudio() throws IOException, UnsupportedAudioFileException, InterruptedException{
  54. try{
  55. sonido = AudioSystem.getClip();
  56. File archivo = new File("sonido2.wav");
  57. sonido.open(AudioSystem.getAudioInputStream(archivo));
  58. sonido.start();
  59. Thread.sleep(1000);
  60. sonido.close();
  61. }catch(LineUnavailableException ex){
  62. ex.printStackTrace();
  63. }
  64. }
  65. public static void main(String[] args) {
  66. Sonido ventana = new Sonido();
  67. }
  68. }

DIBUJAR IMÁGENES 

Las imágenes pueden dibujarse sobreescribiendo el método paintComponent() o el método paint(). Según si la clase extiende de un JFrame o un JPanel se sobreescribirá un método u otro.

paintComponent()

El código siguiente consta de una clase (Dibujar) que crea una ventana y añade esta ventana un elemento de tipo Panel.

  1. package Multimedia;
  2. import java.awt.Toolkit;
  3. import javax.swing.JFrame;
  4. public class Dibujar extends JFrame{
  5. Panel panel;
  6. public Dibujar(){
  7. this.setTitle("Imagen");
  8. this.setSize(300,300);
  9. this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  10. panel= new Panel();
  11. this.add(panel);
  12. }
  13. public static void main(String[] args) {
  14. Dibujar ima = new Dibujar();
  15. ima.setVisible(true);
  16. }
  17. }

La clase Panel que extiende de JPanel es la que junto a los métodos de la clase Graphics2D sobreescribe el método paintComponent() permitiendo dibujar la imagen.

  1. package Multimedia;
  2. import java.awt.Color;
  3. import java.awt.Graphics;
  4. import java.awt.Graphics2D;
  5. import java.awt.Image;
  6. import java.awt.Toolkit;
  7. import javax.swing.JPanel;
  8. public class Panel extends JPanel{
  9. Toolkit toolkit = Toolkit.getDefaultToolkit();
  10. public Panel(){
  11. this.setBackground(Color.red);
  12. this.setSize(300,300);
  13. }
  14. @Override
  15. public void paintComponent(Graphics g){
  16. Graphics2D g2d = (Graphics2D) g;
  17. g2d.setBackground(Color.white);
  18. g2d.clearRect(0, 0, 300, 300);
  19. Image imagen = toolkit.getImage("angular_logo.png");
  20. g2d.drawImage(imagen,0,0,250,250,this);
  21. }
  22. }

paint()

El ejemplo siguiente es idéntico al anterior pero realizándose todo desde un mismo archivo, extendiendo solamente de la clase JFrame. Para sobreescribir desde el JFrame se llama al método paint() de la misma forma que si fuera paintComponent().

  1. package Multimedia;
  2. import java.awt.Color;
  3. import java.awt.Graphics;
  4. import java.awt.Graphics2D;
  5. import java.awt.Image;
  6. import java.awt.Toolkit;
  7. import javax.swing.JFrame;
  8. public class DrawImage extends JFrame{
  9. JPanel panel;
  10. Toolkit toolkit = Toolkit.getDefaultToolkit();
  11. public DrawImage(){
  12. this.setTitle("Imagen");
  13. this.setSize(300,300);
  14. this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  15. panel= new JPanel();
  16. panel.setSize(300,300);
  17. panel.setBackground(Color.red);
  18. this.add(panel);
  19. }
  20. @Override
  21. public void paint(Graphics g){
  22. Graphics2D g2d = (Graphics2D) g;
  23. Image imagen = toolkit.getImage("angular_logo.png");
  24. g2d.drawImage(imagen,10,10,280,280,this);
  25. }
  26. public static void main(String[] args) {
  27. DrawImage ima = new DrawImage();
  28. ima.setVisible(true);
  29. }
  30. }

Además de dibujar la imagen es posible realizar algunas transformaciones a dicha imagen mediante la clase AffineTransform()

  1. package Multimedia;
  2. import java.awt.Graphics;
  3. import java.awt.Graphics2D;
  4. import java.awt.geom.AffineTransform;
  5. import javax.swing.ImageIcon;
  6. import javax.swing.JComponent;
  7. import javax.swing.JFrame;
  8. public class TransformImage {
  9. Dibujo draw;
  10. public TransformImage(){
  11. JFrame frame = new JFrame();
  12. draw=new DrawImg();
  13. frame.add(draw);
  14. frame.setSize(300,300);
  15. frame.setVisible(true);
  16. }
  17. class DrawImg extends JComponent {
  18. @Override
  19. public void paint (Graphics g){
  20. Graphics2D g2d = (Graphics2D) g;
  21. AffineTransform at = new AffineTransform();
  22. double x =120;
  23. double y =320;
  24. at.translate(x,y);
  25. at.rotate(180);
  26. g2d.setTransform(at);
  27. g2d.drawImage(new ImageIcon("angular_logo.png").getImage(),at,this);
  28. }
  29. }
  30. public static void main(String[] args) {
  31. TransformImage edit = new TransformImage();
  32. }
  33. }

La acción de dibujar se lleva a cabo mediante la clase Graphics2D con su método drawImage(), pero es importante destacar que mientras en los ejemplos anteriores se obtiene la imagen mediante la clase Image y se indica la ruta mediante clase Toolkit, en éste, se realiza la conversión mediante la clase ImageIcon y su método getImage().

ESCRIBIR ARCHIVOS 

La clase BufferedWriter y la clase PrintWriter permiten la escritura de archivos. BufferedWriter es más eficiente mientras que PrintWriter tiene acceso a métodos basados en print como println(). Los dos prescinden de la clase FileWriter para el proceso de escritura y los dos disponen de métodos similares.

Para crear un archivo con PrintWriter son necesarios tres pasos. Un primer paso que consiste en abrir el archivo, un segundo paso basado en escribir los datos y el tercero y último que cierra el archivo.

El código siguiente realiza este proceso de escritura de archivos mediante la clase PrintWriter. Básicamente se basa en la creación de un archivo (mediante la clase File), donde se escribe una línea con una cadena predefinida y otra línea con los datos introducidos en el campo de texto de la ventana. El proceso de escritura se genera  mediante un evento que se activa cuando se pulsa el botón Guardar.

  1. package Archivos;
  2. import java.awt.BorderLayout;
  3. import java.awt.Container;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.io.File;
  7. import java.io.FileWriter;
  8. import java.io.PrintWriter;
  9. import javax.swing.JButton;
  10. import javax.swing.JFrame;
  11. import javax.swing.JTextField;
  12. public class writeFile extends JFrame implements ActionListener {
  13. JTextField inputText;
  14. File file;
  15. JButton button;
  16. public writeFile(){
  17. inputText = new JTextField("Escribir");
  18. button = new JButton("Guardar");
  19. add(inputText);
  20. add(button);
  21. button.addActionListener(this);
  22. Container contenedor = getContentPane();
  23. contenedor.add(inputText,BorderLayout.NORTH);
  24. setSize(400,400);
  25. setDefaultCloseOperation(EXIT_ON_CLOSE);
  26. setVisible(true);
  27. }
  28. @Override
  29. public void actionPerformed(ActionEvent e) {
  30. String text = inputText.getText();
  31. if(e.getSource() == button){
  32. file = new File("archivo.txt");
  33. try{
  34. FileWriter writer = new FileWriter(file);
  35. PrintWriter printwriter = new PrintWriter(writer);
  36. printwriter.append("Hola");
  37. printwriter.println();
  38. printwriter.append(text);
  39. printwriter.close();
  40. }catch(Exception ex){
  41. ex.printStackTrace();
  42. }
  43. }
  44. }
  45. public static void main(String[] args){
  46. writeFile esc = new writeFile();
  47. }
  48. }

El código siguiente es similar al ejemplo anterior pero utilizando BufferedWriter, con la opción añadida de que en lugar de crear un archivo nuevo cada vez que se pulsa el botón Guardar, añade datos a continuación de los datos existentes sin sobrescribir el archivo y solo lo crea si no existe.

  1. package Archivos;
  2. import java.awt.BorderLayout;
  3. import java.awt.Container;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.io.BufferedWriter;
  7. import java.io.File;
  8. import java.io.FileWriter;
  9. import javax.swing.JButton;
  10. import javax.swing.JFrame;
  11. import javax.swing.JTextField;
  12. public class writeFile extends JFrame implements ActionListener {
  13. JTextField inputText;
  14. File file;
  15. JButton button;
  16. public writeFile(){
  17. inputText = new JTextField("Escribir");
  18. button = new JButton("Guardar");
  19. add(inputText);
  20. add(button);
  21. button.addActionListener(this);
  22. Container contenedor = getContentPane();
  23. contenedor.add(inputText,BorderLayout.NORTH);
  24. setSize(400,400);
  25. setDefaultCloseOperation(EXIT_ON_CLOSE);
  26. setVisible(true);
  27. }
  28. @Override
  29. public void actionPerformed(ActionEvent e) {
  30. String text = inputText.getText();
  31. if(e.getSource() == button){
  32. file = new File("archivo.txt");
  33. try{
  34. BufferedWriter writer =new BufferedWriter(new FileWriter(file.getAbsoluteFile(),true));
  35. writer.write("hola");
  36. writer.newLine();
  37. writer.write("otra línea");
  38. writer.newLine();
  39. writer.write(text);
  40. writer.flush();
  41. }catch(Exception ex){
  42. ex.printStackTrace();
  43. }
  44. }
  45. }
  46. public static void main(String[] args){
  47. writeFile esc = new writeFile();
  48. }
  49. }

LEER ARCHIVOS

Para leer archivos Java dispone de la clase BufferedReader, que a diferencia de FileReader, permite leer línea por línea y devuelve null cuando finaliza la lectura.  El código que sigue a continuación permite introducir la ruta de un archivo y mediante un evento identifica si los datos introducidos pertenecen a la ruta de un archivo o de un directorio. En caso de un directorio muestra en el textarea el contenido del directorio en forma de lista, mientras que en caso de un archivo realiza el proceso de escritura y muestra en el textarea el contenido del archivo.

 

  1. package Archivos;
  2. import java.awt.BorderLayout;
  3. import java.awt.Container;
  4. import java.awt.ScrollPane;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.awt.event.MouseEvent;
  8. import java.awt.event.MouseListener;
  9. import java.io.BufferedReader;
  10. import java.io.BufferedWriter;
  11. import java.io.File;
  12. import java.io.FileReader;
  13. import java.io.FileWriter;
  14. import javax.swing.JFrame;
  15. import javax.swing.JOptionPane;
  16. import javax.swing.JTextArea;
  17. import javax.swing.JTextField;
  18. public class ReadFile extends JFrame implements ActionListener, MouseListener {
  19. JTextArea text;
  20. JTextField input;
  21. boolean focus;
  22. public ReadFile(){
  23. focus = false;
  24. input = new JTextField("Escribir la ruta del archivo");
  25. input.addActionListener(this);
  26. input.addMouseListener(this);
  27. text = new JTextArea();
  28. ScrollPane scroll = new ScrollPane();
  29. scroll.add(text);
  30. Container container = getContentPane();
  31. container.add(input,BorderLayout.NORTH);
  32. container.add(scroll, BorderLayout.CENTER);
  33. setSize(400,400);
  34. setDefaultCloseOperation(EXIT_ON_CLOSE);
  35. }
  36. @Override
  37. public void actionPerformed(ActionEvent e) {
  38. File file = new File(e.getActionCommand());
  39. //File file2 = new File("archivo.txt");
  40. System.out.println(e.getActionCommand());
  41. if(file.exists()){
  42. text.setText("El dato "+file.getName()+ " existe en la ruta especificada\n");
  43. if(file.isFile()){
  44. text.append("Es un archivo\n");
  45. try{
  46. BufferedReader read = new BufferedReader(new FileReader(file));
  47. StringBuffer buffer = new StringBuffer();
  48. String st;
  49. text.append("\n");
  50. while((st = read.readLine())!=null){
  51. buffer.append(st+"\n");
  52. }
  53. text.append(buffer.toString());
  54. }catch(Exception ex){
  55. JOptionPane.showMessageDialog(this, "ERROR LEYENDO ARCHIVO", "Error", JOptionPane.ERROR_MESSAGE);
  56. }
  57. }else{
  58. if(file.isDirectory()){
  59. String dir[]=file.list();
  60. text.append("Es un directorio \n");
  61. text.append("El contenido a continuación en forma de lista \n");
  62. for(int i=0;i<dir.length;i++){
  63. text.append(dir[i]+"\n");
  64. }
  65. }
  66. }
  67. }
  68. }
  69. public static void main(String[] args) {
  70. ReadFile readfile = new ReadFile();
  71. readfile.setVisible(true);
  72. }
  73. @Override
  74. public void mouseClicked(MouseEvent e) {
  75. input.setText("");
  76. }
  77. @Override
  78. public void mousePressed(MouseEvent e) {
  79. }
  80. @Override
  81. public void mouseReleased(MouseEvent e) {
  82. }
  83. @Override
  84. public void mouseEntered(MouseEvent e) {
  85. }
  86. @Override
  87. public void mouseExited(MouseEvent e) {
  88. }
  89. }


Comentarios: 0

Para poder comentar es necesario iniciar sesión



Este dominio utiliza cookies de terceros para crear estadísticas y publicidad personalizada. Si continúa navegando está aceptando su uso