-
Notifications
You must be signed in to change notification settings - Fork 0
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 );
}
}