public class Parent {
public static String say() {
return "parent static say";
}
public String say2() {
return "parent say";
}
}
public class Child extends Parent {
public static String say() {
return "child static say";
}
public String say2() {
return "child say";
}
}
/**
* @author 子弹哥
*
*/
public class OverrideTest {
public static void main(String[] args) {
Parent p = new Child();
System.out.println(p.say());
System.out.println(p.say2());
}
}
结果:
parent static say
child say
分析:
1.我们创建了一个Parent类的实例。变量 p 的数据类型为 Parent 类 但是它仍旧是 Child 类的一个实例。因为Child类覆盖了Parent类的方法say2(),所以p.say2()调用为子类的方法。
2.为什么p.say()却是调用父类Parent的方法呢?因为Java中规定“实例方法被覆盖,静态方法被隐藏”.
关于Override的一些规则:
用子类的静态方法隐藏父类中同样标识的实例方法是不合法的,编译器将会报错;
用子类的实例方法覆盖父类中同样标识的静态方法也是不合法的,编译器同样会报错;
带关键字 final的方法(静态和实例方法)都不能被覆盖;
实例方法能够被覆盖;
抽象方法必须在具体类中被覆盖。
分享到:
相关推荐
- `@Override` 注解用于标记一个子类中的方法,以表明该方法是覆盖了父类中的同名方法。如果该方法实际上并未覆盖父类中的任何方法,则不应该使用此注解。 #### 三、解决方案 1. **更新 JDK 版本**: - 确保安装...
方法重写 ... 创建一个新的中间件函数,以新值覆盖req.method属性。 该值将从提供的getter提取。 getter用于查找请求的重写请求方法的getter。 (默认值: X-HTTP-Method-Override ) options.methods
这表示你在派生类中创建了一个新的方法,它覆盖了基类中的同名方法,但这种覆盖是"静态"的,也就是说,只有通过派生类的实例才能访问这个新方法,而不能通过基类的引用访问。 2. `override` 关键字: `override` ...
当你在派生类中使用 `override` 关键字修饰一个方法时,这个方法将覆盖基类中相同签名的虚方法。这样做使得派生类可以提供与基类不同的实现,从而根据实例化类型来执行不同的行为。例如: ```csharp public class ...
在 Lua 中,子类可以覆盖父类的方法,这就是所谓的“override”。在上面的 `Student` 类中,`sayHello` 方法就被重写了。当调用子类对象的 `sayHello` 方法时,将执行子类版本的代码,而不是父类的。 ```lua local ...
覆盖 Override 马克-to-win Java视频的能详细的介绍
覆盖 Override 马克-to-win java视频的详细描述介绍
* 使用 override 修饰符可以在子类中覆盖基类中的虚拟方法或属性。 示例代码: ```csharp public class Base { public virtual void Work() { Console.WriteLine("基类--开始工作"); } } public class ...
启用阶段0或es7.decorators在巴别,然后标记该意图覆盖超类与性质性质@Override 。 class A { a ( ) { /* ... */ } } class B extends A { @ Override a ( ) { /* ... */ } } 如果装饰的属性没有覆盖父...
这个名为"Animator_层级覆盖遮罩左右手动画_Layer_Override_AvatarMask_HandwaveLeftOrRight.zip"的压缩包文件提供了一个关于如何使用Animator的层级覆盖遮罩来实现左右手动画的示例。以下将详细介绍相关的知识点。 ...
HTTP方法覆盖koa的中间件。 从派生 安装 npm install koa-methodoverride 注意: koa-methodoverride@2.x表示koa@2.x ,将koa-methodoverride@1.x和koa@1.x koa-methodoverride@1.x使用。 用法,更多 var app = ...
在 Lua 中,尽管其语言设计之初并...通过定义类表、设置 `__index` 元方法以及重写父类方法,我们可以实现面向对象编程的关键特性,如继承和方法的覆盖。这使得 Lua 在编写复杂系统时也能保持代码的组织性和可扩展性。
当一个类继承自另一个类时,它不仅可以重用基类的成员,还可以通过覆盖(Override)或隐藏(使用 New 关键字)这些成员来扩展或改变行为。本文将详细探讨 C# 中 `override` 和 `new` 关键字的区别及其应用场景。 ##...
当我们使用`override`关键字时,编译器会检查我们是否正确地覆盖了父类的虚函数,如果函数签名不匹配,编译器将报错。对于运算符重载,虽然它们不是虚函数,但`override`关键字仍然可以作为一种编程约定,提醒其他...
koa-override 方法覆盖中间件。 让您在客户端不支持的地方使用诸如 PUT 或 DELETE 之类的 HTTP 动词。 从重构 安装 $ npm install koa-override --save 用法 const bodyParser = require ( 'koa-bodyparser' ) ...
3. **非抽象方法覆盖抽象方法**:如果你尝试覆盖一个抽象方法,但没有使用`@Override`注解,且方法签名不完全匹配,可能会出现这个错误。 4. **使用了`@Override`注解,但没有找到可重写的方法**:这表明可能存在...
在Java 1.5之前,`@Override`注解主要用于明确指出一个方法是覆盖了父类中的同名方法。而在Java 1.6中,`@Override`的使用范围扩大,可以应用于接口方法的实现,这为代码的可读性和可维护性带来了很大的提升。然而,...
总结一下,"重载"(Overload)和"覆盖"(Override)的主要区别在于: 1. 重载发生在同一类中,而覆盖发生在子类对父类的继承关系中。 2. 重载关注方法的签名(包括名称和参数列表),允许返回类型不同;而覆盖要求...
1. `new`关键字隐藏基类成员,而不是覆盖,而`override`关键字则是真正的覆盖。 2. 使用`new`时,调用方法的决定在编译时完成(静态绑定);使用`override`时,决定在运行时完成(动态绑定,基于对象实际类型)。 3....
在这个例子中,`Child`类通过`@Override`注解覆盖了`Parent`类的`printMessage`方法。当在`Child`的实例上调用`printMessage`时,将执行子类的实现,而不是父类的。 `override`和`重载`的区别在于: 1. **目的不同*...