`
echohfut
  • 浏览: 233111 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

覆盖重载隐藏遮蔽遮掩

    博客分类:
  • JDK
阅读更多

1. override 覆写

    用于实例方法,签名相同,动态分派

    a) 子类方法限定要大于等于父类。即限定变大了。

    b) Never add exception types to the throws clause of a method overridden in a subclass

        也即不能添加更多的异常到子类签名中。可以是父类异常的子类异常,甚至不加异常。所以异常应该是变小了。这主要是为了遵守Liskov OOP 替换原则。子类必须能替换父类,如果子类里有新加的异常,Try/Catch起码要引起变动。相反,子类没有异常并不影响现有的代码。

 

2. Hide 隐藏

 子类属性隐藏父类的,也即父类属性不能继承到子类中(相同名字的话,可以是不同类型)。当然可以通过把子类转型到父类访问父类的属性。这是与覆写不同的地方。

a) 

private 属性根据dynamic type决定

frendly,pretected,public 属性根据static type 决定

静态属性根据类名决定,与类实例无关(即使是static final 类型的子类亦可Hide)

 

3. overload 重载

 父类frendly / pretected / public 方法会继承到子类中,这时父类和子类中相同的方法签名也是overload(重载)。并不是只有定义在一个类中的方法才构成重载。

注意重载哪个方法是在编译时选择的,这与Override非常不同。

 

 4. shadow 遮蔽

变量,方法或类型都有可能

常见的是临时变量遮蔽了类变量或者全局变量。对象方法遮蔽了static import进来的方法。

外围类(enclosing class)包含一个内部类(inner class),内部类(比如继承Thread类)继承的成员方法(比如sleep)遮蔽了外围累(enclosing class)的方法。 

 

5. obscure 遮掩

变量可以遮掩类型,类型可以遮掩包。也即优先级不一样

比如声明一个变量名字为System(非正规的命名),该变量System会obscure Java系统类型System

 

分享到:
评论

相关推荐

    重载、覆盖和隐藏

    ### 重载、覆盖和隐藏:面向对象编程中的三大概念 在面向对象编程中,类成员函数的重载(Overloading)、覆盖(Overriding)和隐藏(Hiding)是三个非常重要的概念,它们帮助程序员更好地管理和扩展代码。下面将...

    c#的重载、覆盖、隐藏

    ### C#中的重载(Overloading)、覆盖(Overriding)与隐藏(Hiding) #### 一、概述 在面向对象编程语言C#中,方法的重载(Overloading)、覆盖(Overriding)以及隐藏(Hiding)是实现多态性的三种重要机制。这三种机制都...

    C++成员函数的重载、覆盖与隐藏

    文件详细描述了C++成员函数的重载、覆盖与隐藏技术,对于初学C++的人员很有帮准,也是我们程序猿参考、学习的重要资料。

    重载、覆盖、多态与函数隐藏

    在面向对象编程中,重载、覆盖、多态和函数隐藏是几个重要的概念,它们共同作用于类的继承体系中,影响程序的行为和扩展性。下面将详细解释这些概念,并通过C++中的代码示例来加深理解。 首先,函数重载...

    Java语言中的 覆盖重载和多态

    Java语言中的覆盖(Override)和重载(Overload)以及多态(Polymorphism)是面向对象编程的重要概念,它们是实现代码复用和灵活性的关键。 **多态性(Polymorphism)** 多态性是Java中一种允许一个接口有多种实现的方式。...

    C++的重载、隐藏、覆盖规则

    在C++编程语言中,重载(Overloading)、隐藏(Hiding)和覆盖(Overriding)是三个重要的概念,它们涉及到函数和运算符在不同情况下的多态性表现。理解并掌握这些规则对于编写高效、可维护的代码至关重要。 ### 1....

    delphi动态虚拟覆盖重载重定义的区别

    DELPHI中方法的类型及其覆盖、重载 1、静态方法是方法的缺省类型,对它就像对通常的过程和函数那样调用,编译器知道这些方法的地址,所以调用一个静态方法时它能把运行信息静态地链接进可执行文件,所以,静态方法...

    C++全套学习课件函数的覆盖、隐藏和重载.pdf

    在C++编程语言中,函数的覆盖(Overriding)、隐藏(Hiding)和重载(Overloading)是三个重要的概念,它们与面向对象编程的多态性紧密相关。理解并熟练掌握这些概念对于编写高效、可维护的代码至关重要。 1. 函数...

    C++函数的重载和覆盖

    在C++编程语言中,函数的重载(Overloading)和覆盖(Overriding)是两个重要的概念,它们分别涉及到同一作用域内的多态性和继承体系中的多态性。本篇文档将深入探讨这两个主题,帮助你更好地理解和运用它们。 ### ...

    Java 中方法的重载与覆盖

    7. **静态方法不能被覆盖**:如果父类中的方法是静态的(static),那么子类中的方法也必须是静态的,但这种情况下并不是覆盖而是方法隐藏。 #### 示例 下面通过示例进一步说明方法覆盖: ```java class AA { ...

    c++ 重载、覆盖、重写

    ### C++中重载、重写(覆盖)与隐藏的概念及区别 #### 一、引言 在C++面向对象编程中,理解重载、重写(覆盖)以及隐藏的概念至关重要。这些概念不仅有助于我们更好地设计类和继承体系,还能帮助我们避免一些常见的...

    函数重载和覆盖的区别.doc

    ### 函数重载和覆盖的区别 #### 一、引言 在编程领域,函数重载(Overloading)和覆盖(Overriding)是两种常见的多态性实现方式,它们允许程序员在代码中创建更加灵活和复用性强的功能。尽管两者名称相似,但它们...

    java中重载、覆盖和隐藏三者的区别分析

    在Java编程语言中,重载(Overloading)、覆盖(Overriding)和隐藏(Hiding)是三个重要的概念,它们都是多态性(Polymorphism)的表现形式,但各自有着独特的规则和特点。 **重载(Overloading)** 重载是指在同...

    C++中重载、重写(覆盖)和隐藏的区别实例分析

    在C++中,面向对象编程涉及三个重要概念:重载(Overloading)、重写(Overriding,也称为覆盖)和隐藏(Hiding)。这些概念在理解C++的多态性和类继承机制时至关重要。 1. 重载(Overloading) 重载是指在同一个...

    SigalHu#MyBlog#类中成员函数的重载、覆盖与隐藏[转]1

    原文:C++类成员函数的 重载、覆盖和隐藏区别重载成员函数被重载的特征:相同的范围(在同一个类中)函数名字相同参数不同virtual 关键字可有可无void s

    C++中的重载、覆盖、隐藏介绍

    前几天面试时被问及C++中的覆盖、隐藏,概念基本答不上来,只答了怎么用指针实现多态,也还有遗漏。最终不欢而散。回来后在网上查找学习了一番,做了这个总结。其中部分文字借用了别人的博客,望不要见怪。 •概念 ...

    基于C++中覆盖,重载,隐藏的一点重要说明

    C++覆盖 重载 隐藏是三个经常容易混淆的概念 这里我们简单总结下: 1.重载的条件(编译时多态) a.同一个类中 b.函数名相同,参数不同(返回值不能作为重载的条件) c.与函数是否为虚函数无关 2.覆盖的条件(运行时多态) a...

    成员函数的重载、覆盖与隐藏详细解析

    1 重载与覆盖成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生...

Global site tag (gtag.js) - Google Analytics