class Ding{
public String toString(){
return "Ding";
}
}
class Grain extends Ding{
public String toString(){
return "Grain";
}
}
class Wheat extends Grain{
public String toString(){
return "Wheat";
}
}
/***********************/
class Mill{
Grain process(){
return new Grain();
}
}
class WheatMill extends Mill{
@Override
Wheat process(){
return new Wheat();
}
}
public class CovariantReturn {
public static void main(String[] args) {
// TODO Auto-generated method stub
Mill mill = new Mill();
Ding g = mill.process();
System.out.println(g.toString());
mill = new WheatMill();
g = mill.process();
System.out.println(g.toString());
}
}
注:WheatMill 类重写了Mill 类的process方法。但是这个重写和我们之前接触的重写又有些不同。仔细看可以发现子类重写父类的方法的返回类型和父类的方法的返回类型是不一样的。但是两个返回类型也存在着关系:即子类方法的返回类型是父类方法返回类型的子类。这里其实就是JDK的新特性了。我们之前关于重写的概念是:子类重写父类的方法,方法名,返回类类型,参数列表都要相同。从JDK5以后就允许子类冲重写父类方法的返回类型可以是父类方法的返回类型的子类了。具体有什么好处,呵呵,说不上来。不过这样更能说明多态了。
分享到:
相关推荐
本文将深入探讨Java的一些值得注意的细节,帮助你避免常见陷阱,提升代码质量。 1. **自动装箱与拆箱**:Java中的`Integer`等包装类提供了自动装箱和拆箱功能,方便了开发者操作。但需要注意,虽然在基本类型和包装...
此外,值得注意的是,Laravel的FormRequest类不仅仅提供了验证功能,还提供了授权(authorize)功能,该方法可以用来判断当前用户是否有权限发起请求。这是Laravel提供的一个安全保障特性,用于防止未授权的用户操作...
- **建议**:如果某一段落过长,可以将其拆分为两段,每段专注于一个核心观点。 #### 14. 制作大纲 - **作用**:帮助作者理清思路,确保文章结构严谨。 - **实施步骤**:在写作前或完成后制作一页纸的大纲,检查...
值得注意的是,Java中只支持单继承,即一个类只能继承自一个父类。继承的目的是代码复用和提高程序的可扩展性。例如,在文档中提供的例子中,长方形类(Rectangle)继承了四边形类(Quad),长方形类增加了描述...
值得注意的是,`final`不能与`abstract`同时使用,因为`abstract`方法没有实现体,而`final`方法则不允许被重写。例如: ```java public class Something { public final int addOne(final int x) { return ++x; ...
在JAVA编程中,有许多重要的细节值得开发者关注。本文将根据提供的部分描述,深入解析JAVA开发过程中需要注意的关键知识点,并针对这些知识点进行详细说明。 #### 1. String 对象的理解与操作 - **String 的不可...
值得注意的是,override和final说明符都是在C++11标准中引入的,因此在使用这些特性时,编译器需要支持C++11或更高版本的标准。此外,在使用这些说明符时,还需注意其对程序设计的细节影响,例如,final类的构造函数...
封装是面向对象编程的一个关键特性,其核心目标在于隐藏对象内部的具体实现细节,只暴露必要的接口供外部调用。这不仅提高了代码的安全性,还促进了模块化和代码的复用。在Java中,封装主要通过`private`、`...
封装是面向对象编程的一个基本原理,它指的是将数据和操作数据的方法绑定在一起,隐藏对象的内部状态和实现细节,仅通过公共接口与外部进行交互。这种机制可以防止程序的其他部分错误地修改了对象内部的状态,同时也...
封装是面向对象编程的一个基本原则,它涉及到隐藏对象的属性和实现细节,只对外公开简单的操作接口。在Java中,可以通过使用访问控制符来实现封装。访问控制符主要有四种:public、protected、默认(friendly)和...
值得注意的是,工厂模式增加了系统的抽象性,可能会引入额外的间接层次,使得系统的设计变得更加复杂。开发者应该根据实际项目情况选择合适的模式。在简单的应用中,如果系统不需要支持多个变体或者灵活性要求不高,...
值得注意的是,自定义组件可能会带来一些性能和稳定性的挑战。为了保证良好的用户体验,我们需要确保自定义的竖向ViewPager在处理大量数据或复杂布局时依然流畅,避免内存泄漏和不必要的计算。在本案例中,描述中...
值得注意的是,为了使窗体的非矩形部分透明,需要设置`ControlStyles.SupportsTransparentBackColor`,并将背景颜色设为透明。然后,你可以通过调整GraphicsPath中的点来改变窗体的形状。 另外,压缩包中提到的...
值得注意的是,C#支持单一继承,即一个类只能直接继承自一个基类,但通过接口可以实现多继承的效果。 最后,**多态**(Polymorphism)允许同名的方法在不同的类中有不同的实现,这增强了代码的灵活性和可扩展性。...
其中值得注意的是,`Point`类提供了一个纯虚函数`Area()`,该函数返回值为0,这实际上是为了后续派生类的统一处理而设计的。 ### Line 类 `Line`类继承自`Point`类,并在此基础上添加了额外的两个点成员变量`point...
然而,值得注意的是,虽然Lombok简化了代码,但也可能导致代码可读性下降,因为它隐藏了部分实现细节。因此,在团队协作中,应确保所有成员都熟悉Lombok的用法,并在适当的时候添加文档说明。 总的来说,Lombok通过...
### 面向对象设计原则基础 面向对象编程(Object-Oriented Programming,简称OOP)自诞生以来,已经成为软件开发领域的...然而,值得注意的是,虽然这些原则非常重要,但在实际开发过程中也需要根据具体情况灵活应用。
《TestScreenRollView:逐字显示的动画效果详解》 在移动应用开发中,吸引用户注意力的动画设计是提升用户体验的重要一环。...对于想要提升应用交互性的开发者,"TestScreenRollView"无疑是一个值得探索和实践的设计。