Skip to content

1.2 Override methods

Weverton edited this page Aug 25, 2016 · 1 revision

Em um método override a exceção pode ser:

  • Igual;
  • Filha;
  • RuntimeException;
  • Nenhuma.

Nesse cenário uma possível implementação seria utilizar uma exceção filha, para que compile corretamente.

interface I1 {
	void m1() throws java.io.IOException;
} 

interface I2 {
	void m1() throws java.io.FileNotFoundException;
}

public class Teste2 implements I1, I2 {
	@Override
	public void m1() throws FileNotFoundException {
	}
}

Não pode lançar uma exceção verificada. Ele pode lançar qualquer exceção não verificada. Ele pode não lançar nada.

class TaskBase {
	int getStatusCode(Object obj) throws NullPointerException {
		if(obj != null ) return 1;
		else return 0;
	} 
} 

class ParallelTask extends TaskBase {    
	//override getStatusCode method.
}

Nesse cenario para realizar o override corretamente os dois métodos devem ser atendidos.
Para isso devemos ou deixar sem lançar exceção ou lançar uma exceção não verificada.

interface I1{
	void m1() throws IOException;
}

interface I2{
	void m1() throws SQLException;
}

Opção 1:

public class Teste3 implements I1, I2 {
	@Override
	public void m1() throws RuntimeException {}
}

Opção 2:

public class Teste3 implements I1, I2 {
	@Override
	public void m1() {}
}

O código abaixo é invalido, lembrando que o modificador de acesso não pode ser menos restritivo ao realizar o override.

abstract class Saloon {
   protected int m1(){ return 0; }
}

public class OverridingSaloon extends Saloon{
   int m1(){ return 1; }
}

O código abaixo não compila. Os métodos apresentam ambiguidade.

class Point { int x, y; }
class ColoredPoint extends Point { int color; }
class Test{
	static void test(ColoredPoint p, Point q){
		System.out.println("(ColoredPoint, Point)");
	}
	static void test(Point p, ColoredPoint q){
		System.out.println("(Point, ColoredPoint)");
	}
	public static void main(String[] args){
		ColoredPoint cp = new ColoredPoint();
		test(cp, cp);
	}
}

O resultado da execução desse código é: going, gone

class Teste6 {

   public static void main(String[] args){
      String s = "going";
      print(s,  s = "gone");
   }
   
   static void print(String a, String b){
      System.out.println(a +", "+ b );
   }
   
}