`
liukaibernard
  • 浏览: 2377 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

【转】Override覆盖

 
阅读更多
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错误已解决

    - `@Override` 注解用于标记一个子类中的方法,以表明该方法是覆盖了父类中的同名方法。如果该方法实际上并未覆盖父类中的任何方法,则不应该使用此注解。 #### 三、解决方案 1. **更新 JDK 版本**: - 确保安装...

    method-override:覆盖HTTP动词

    方法重写 ... 创建一个新的中间件函数,以新值覆盖req.method属性。 该值将从提供的getter提取。 getter用于查找请求的重写请求方法的getter。 (默认值: X-HTTP-Method-Override ) options.methods

    new,override,virtual 示例

    这表示你在派生类中创建了一个新的方法,它覆盖了基类中的同名方法,但这种覆盖是"静态"的,也就是说,只有通过派生类的实例才能访问这个新方法,而不能通过基类的引用访问。 2. `override` 关键字: `override` ...

    c# override new base 关系

    当你在派生类中使用 `override` 关键字修饰一个方法时,这个方法将覆盖基类中相同签名的虚方法。这样做使得派生类可以提供与基类不同的实现,从而根据实例化类型来执行不同的行为。例如: ```csharp public class ...

    Lua 类的继承与函数override

    在 Lua 中,子类可以覆盖父类的方法,这就是所谓的“override”。在上面的 `Student` 类中,`sayHello` 方法就被重写了。当调用子类对象的 `sayHello` 方法时,将执行子类版本的代码,而不是父类的。 ```lua local ...

    覆盖(Override)---马克-to-win Java视频

    覆盖 Override 马克-to-win Java视频的能详细的介绍

    覆盖(Override)2---马克-to-win java视频

    覆盖 Override 马克-to-win java视频的详细描述介绍

    new、abstract、virtual、override,sealed关键字区别和使用代码示例

    * 使用 override 修饰符可以在子类中覆盖基类中的虚拟方法或属性。 示例代码: ```csharp public class Base { public virtual void Work() { Console.WriteLine("基类--开始工作"); } } public class ...

    override-decorator:ES7 的简单覆盖装饰器

    启用阶段0或es7.decorators在巴别,然后标记该意图覆盖超类与性质性质@Override 。 class A { a ( ) { /* ... */ } } class B extends A { @ Override a ( ) { /* ... */ } } 如果装饰的属性没有覆盖父...

    Animator_层级覆盖遮罩左右手动画_Layer_Override_AvatarMask_HandwaveLeftOrRight.zip

    这个名为"Animator_层级覆盖遮罩左右手动画_Layer_Override_AvatarMask_HandwaveLeftOrRight.zip"的压缩包文件提供了一个关于如何使用Animator的层级覆盖遮罩来实现左右手动画的示例。以下将详细介绍相关的知识点。 ...

    methodoverride:HTTP方法覆盖Koa中间件

    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 类的继承与override

    在 Lua 中,尽管其语言设计之初并...通过定义类表、设置 `__index` 元方法以及重写父类方法,我们可以实现面向对象编程的关键特性,如继承和方法的覆盖。这使得 Lua 在编写复杂系统时也能保持代码的组织性和可扩展性。

    了解何时使用 Override 和 New 关键字(C# 编程指南)

    当一个类继承自另一个类时,它不仅可以重用基类的成员,还可以通过覆盖(Override)或隐藏(使用 New 关键字)这些成员来扩展或改变行为。本文将详细探讨 C# 中 `override` 和 `new` 关键字的区别及其应用场景。 ##...

    opreator-override.zip_override+c++_运算符重载

    当我们使用`override`关键字时,编译器会检查我们是否正确地覆盖了父类的虚函数,如果函数签名不匹配,编译器将报错。对于运算符重载,虽然它们不是虚函数,但`override`关键字仍然可以作为一种编程约定,提醒其他...

    koa-override:koa的方法覆盖中间件

    koa-override 方法覆盖中间件。 让您在客户端不支持的地方使用诸如 PUT 或 DELETE 之类的 HTTP 动词。 从重构 安装 $ npm install koa-override --save 用法 const bodyParser = require ( 'koa-bodyparser' ) ...

    The method of type must override a superclass method解决方式, myeclipse, java, web

    3. **非抽象方法覆盖抽象方法**:如果你尝试覆盖一个抽象方法,但没有使用`@Override`注解,且方法签名不完全匹配,可能会出现这个错误。 4. **使用了`@Override`注解,但没有找到可重写的方法**:这表明可能存在...

    android @override 报错解决方案

    在Java 1.5之前,`@Override`注解主要用于明确指出一个方法是覆盖了父类中的同名方法。而在Java 1.6中,`@Override`的使用范围扩大,可以应用于接口方法的实现,这为代码的可读性和可维护性带来了很大的提升。然而,...

    override和重载的区别

    总结一下,"重载"(Overload)和"覆盖"(Override)的主要区别在于: 1. 重载发生在同一类中,而覆盖发生在子类对父类的继承关系中。 2. 重载关注方法的签名(包括名称和参数列表),允许返回类型不同;而覆盖要求...

    new和override区别的小例子

    1. `new`关键字隐藏基类成员,而不是覆盖,而`override`关键字则是真正的覆盖。 2. 使用`new`时,调用方法的决定在编译时完成(静态绑定);使用`override`时,决定在运行时完成(动态绑定,基于对象实际类型)。 3....

    override和重载 希望对大家有帮助

    在这个例子中,`Child`类通过`@Override`注解覆盖了`Parent`类的`printMessage`方法。当在`Child`的实例上调用`printMessage`时,将执行子类的实现,而不是父类的。 `override`和`重载`的区别在于: 1. **目的不同*...

Global site tag (gtag.js) - Google Analytics