如果父类中的方法抛出CREATE TABLE [dbo].[houses]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[Code] VARCHAR(50) NULL,
[Status] VARCHAR(50) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE TABLE [dbo].[customers]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[Forename] VARCHAR(50) NULL,
[Surname] VARCHAR(50) NULL,
[Email] VARCHAR(50) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE TABLE [dbo].[reservations]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[HouseId] INT NULL,
[CustomerId] INT NULL,
[StartDate] DATE NULL,
[EindDate] DATE NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_HouseId]
FOREIGN KEY ([HouseId]) REFERENCES [houses]([Id]),
CONSTRAINT [FK_CustomerId]
FOREIGN KEY ([CustomerId]) REFERENCES [customers]([Id])
);
,我们可以在重写方法中删除它吗?
Exception
答案 0 :(得分:2)
是的,允许:子类可以告诉Java它不会抛出某个异常,而Java会接受它。
这在您确实知道调用点的确切类时非常有用。
考虑以下设置:
class A {
public void foo() throws Exception {}
}
class B extends A {
public void foo() {}
}
您可以在无法捕获Exception
的上下文中执行此操作:
B b = new B();
b.foo();
Java看到b
的类型为B
,其方法不会抛出已检查的异常,因此允许调用foo()
。
但是,这会导致错误:
A a = new B();
a.foo();
未报告的例外例外;必须被抓住或宣布被抛出
现在Java必须考虑调用的A.foo()
签名。签名包括throws Exception
部分,因此Java必须验证已正确处理已检查的异常。
答案 1 :(得分:1)
是。您可以从重写的方法签名中删除但不添加已检查的异常。