在java中,我们可以缩小返回类型和throws异常类型(甚至删除throws子句):
abstract class A
{
abstract CharSequence getName() throws NameNotAvailableException;
}
class B extends A
{
String getName()
{
return "foo";
}
}
但是,参数类型呢(如果A采用< code>T,那么为什么B不采用< code >?超级T)如:
abstract class A
{
abstract void setName(final String name);
}
class B extends A
{
void setName(final CharSequence name)
{
}
}
让我们考虑一下我认为完全符合逻辑的这段代码:
void handleA(final A a)
{
a.setName("foo");
}
handleA(new B());
所以我要说的是,B
在使用A
的代码上下文中仍然有效。
因为字符序列
不仅是字符串
,而字符串
是字符序列
。换句话说,字符序列
也可以是字符缓冲器
、段
、字符串
、字符串缓冲器
、字符串生成器
。
这就是为什么您不能将setName(String)
的参数类型更改为CharSequence
的原因。
如果我有以下代码 首先,这甚至是可能的,因为它编译得很好。但是我不能使用中的方法执行操作: makeCan是否不同时返回Can和PromotionalCan?如果是这样,当返回PromotionalCan时,如何对变量进行操作?谢谢 编辑:PromotionalCan继承自Can,第二种方法是在PromotionalCan中
我正在做一个体验,尝试用以下方式重写泛型类的方法: 为什么我不能?编译错误是 yGenFun。java:15:错误:对doX的引用不明确,Do中的方法doX(A)和MyGenFun中的方法doX(T)都匹配x.doX(“测试”);^其中A、T是类型变量:在类Do T中声明的extends对象扩展在类MyGenFun 1 error中声明的CharSequence 如果我注释“第1行”,我可以编译代
我想这样设置参数的类型: 当我尝试这样做时,会引发错误:NameError:名称'Tree'未定义
熟悉Java,但对静态编程语言相当陌生。 当子类参数与超类val同名时... Android Studio不会抛出验证错误,说明需要@Overder注释。但是,尝试从Business中访问引用参数而不是超类val(我觉得这就像覆盖)。 当然,我可以将参数命名为不同的名称,但我真的只想将名称传递给超类......否则不包括它在中的任何存储。 我忽略了什么吗?我很惊讶,即使我没有将FirstBusin
如果我在java中有一个抽象的(或据我所知的)超类,如下所示: 我注意到,在重写这个方法时,子类可以使用自身作为返回类型,但不能使用参数: 为什么不允许这样做?我不是在寻求解决方案——我知道我可以在方法中使用< code>instanceof检查或其他方法,我更想知道为什么前者是可以接受的,而后者对编译器来说却不是。
我是java初学者,我不理解这行代码是什么意思 平均值。为什么不能访问自己的方法。请详细解释如果类A正在实例化,那么为什么它的方法不可访问。