Если у вас есть одно общее исключение, вы потеряете некоторые из преимуществ ООП.
Вместо того, чтобы иметь возможность try-catch для определенных типов исключений, вам нужно будет использовать catch для вашего общего исключения, а затем продолжить обработку на основе некоторых полей в вашем классе MyException.
У вас будет что-то вроде этого:
try{
//code here
}
catch (MyException ex){
switch(ex.exceptionType){
case IOException: doSomething();break;
case ConnectionException:doSomethingElse();break;
default: //throw the exception outwards if you don't want to process it
}
}
Когда вместо этого у вас должно быть что-то вроде
try{
//code here
}
catch (IOException ex){
doSomething();
}
catch (ConnectionException ex){
doSomethingElse();
}
что более понятно и более ООП.
Почему вы помещаете все свои исключения в общий тип, это что-то вроде головоломки, это все равно, что сделать все ваши объекты экземплярами только одного класса, но вам потребуется другое поведение, основанное на некоторых флагах.