重载是一定不允许的。比如
class Super{
void f(){
}
int f(){
return 1;
}
}
原因在与如果调用时int i = f();可以知道是调用Sub的f()。但是,往往用户不关心返回值。只是f()。这样就无法确定到底是哪个。
覆盖一般情况是不允许的。比如
class Super{
void f(){
}
}
class Sub extends Super{
int f(){
return 1;
}
}
编译会报错。
但是有办法可以不同(表面上不同)。比如
class Grain{
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{
Wheat process(){//注意返回值
return new Wheat();
}
}
public class CovariantReturn {
public static void main(String[] args) {
Mill m = new Mill();
Grain g = m.process();
System.out.println(g);
m = new WheatMill();
g = m.process();
System.out.println(g);
}
}
这样是完全可以的,运行结果
Grain
Wheat
其实也并不难理解,因为子类本身就可以看做是父类。这个是JAVA1.5后引入的一个概念:
协变返回类型
分享到:
相关推荐
1. **参数列表必须不同**:可以通过不同的参数个数或类型来区分这些方法。 2. **方法的返回类型可以不同**:即使是重载的方法,只要它们的参数列表不同,返回类型可以是任意的。 3. **方法名相同**:所有重载的方法...
Java语言中的覆盖(Override)和重载(Overload)以及多态(Polymorphism)是面向对象编程的重要概念,它们是实现代码复用和灵活性的关键。 **多态性(Polymorphism)** 多态性是Java中一种允许一个接口有多种实现的方式。...
Java重写(Override)与重载(Overload)区别原理解析 Java 编程语言中有两个重要的概念:重写(Override)和重载(Overload)。这两个概念经常被混淆,但它们具有不同的作用和特点。本文将详细地介绍 Java 中的重写和...
重载发生在同一类或具有继承关系的类中,它允许创建多个同名方法,但这些方法必须在参数列表上有所不同,包括参数的个数、类型或者顺序。返回值并不影响方法是否构成重载,因为调用方法时我们并不指定返回值类型。...
Java面试题中涉及的核心知识点是方法的重载(Overload)和重写(Override)。这两者都是Java多态性的体现,但它们有着明显的区别。 重载(Overload)指的是在一个类中可以有多个同名的方法,这些方法的参数列表(参数个数...
重载是指在同一个类中可以定义多个同名的方法,但这些方法的形参个数或类型必须不同。编译器会根据形参的类型、个数和顺序来确定调用哪个方法。重载方法的返回值可以不同或相同,但这不是区分重载方法的依据。 例如...
- Java中重载(Overload)和重写(Override)的区别,以及返回值类型的相关规则; - Java中构造器能否被重写(override); - Java中接口和抽象类的相关特性,以及它们之间的区别; - Java中实现多态的机制; - Java中异常...
Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;...
- 重载允许一个类中有多个同名方法,但参数列表必须不同(参数数量、类型或顺序不同)。返回值类型不影响重载。 - 覆盖发生在子类重写父类的已有的方法,必须保持方法签名一致,包括名称、参数列表及访问权限。...
方法重载用于同名方法不同作用的情况下,方法名称相同,参数列表不同则构成方法重载,方法重载和返回值类型、访问修饰符都无关。方法重写发生在父子类中或接口与实现类中。它用于子类覆盖父类方法实现。 八、面向...
构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。 Java 语言中的作用域有四种:public、private、protected 和默认(default)。public 修饰的元素可以被所有类访问,private 修饰的...
答案:Overload是同名不同参,Override是同名同参,Overloaded 方法可以改变返回值类型。 十九、构造器和接口 19. 构造器 Constructor 是 否 可 被 override? 答案:构造器不能被 override,因为它不是方法。 ...
答:Overload 是方法重载,Override 是方法重写,Overloaded 的方法可以改变返回值的类型。 15. 写 clone()方法时,通常都有一行代码(不是必须有),是什么? 答:super.clone()。 16. 面向对象的特征有哪些方面...
从给定的文件信息中,我们可以提取出与Java OCJP认证考试相关的几个核心知识点,包括类型转换、方法重写(Override)与重载(Overload)、异常处理以及控制流语句。下面将对这些知识点进行详细阐述。 ### 类型转换...
18. Overload(重载)是指在同一个类中,方法名相同但参数列表不同,返回值类型不影响重载。Override(覆盖)是子类重写父类的方法,要求方法名、参数列表和返回值类型都相同,且访问权限不得更低。 【构造器】 19...
Java中是否可以覆盖(override)一个private或者是static的方法?** - **static**:表示静态的,可以用来修饰类、方法或变量。静态成员是类级别的,不依赖于对象的存在。 - 不能覆盖`private`或`static`方法,因为...
Overload(重载)是方法名相同但参数列表不同的方法,可以有不同的返回类型。Override(重写)是指子类方法覆盖父类方法,方法名、参数列表和返回类型都必须相同。 19. 构造器Constructor是否可被override? 构造器...
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。 8. GC是什么?为什么要有GC? GC是垃圾收集的意思(Gabage Collection),内存处理是编程...
Overloaded 的方法是否可以改变返回值的类型? Overload 是指多个方法名相同,但参数列表不同的方法。Override 是指子类中重写父类的方法。Overloaded 的方法可以改变返回值的类型。 18. 搞了多个重载方法,参数...
- **Overload**(重载):在同一个类中定义多个同名方法,但方法的参数列表不同(参数个数或类型不同),这称为方法的重载。 - **Override**(重写):发生在父类与子类之间,子类中定义了一个与父类同名且参数列表...