隐藏变量

在一个类里,如果一个变量的名字和父类的变量的名字一样,即使他们的类型不一样,那么在子类中,父类的同名变量无法直接通过变量名访问。
但是,父类的同名变量可以通过super访问。一般来说,不推荐隐藏变量,这样会让代码难以阅读

覆盖和隐藏方法

对象实例方法

在一个对象实例方法中,如果子类有一个方法,它的签名(方法名字,方法的参数个数和类型)和返回值都和父类一样,那么就是覆盖父类的方法。
子类覆盖的能力,允许一个类,继承父类的行为,根据需要修改某些行为。覆盖的方法,和父类对应的方法有一样的名字,一样的参数类型和个数,一样的返回类型。另一种覆盖方法可以返回父类的方法的返回类型的子类。这个称之为covariant返回类型。
当覆盖一个方法,你要使用注解@Override,告诉编译器你要覆盖父类的方法。但是,如果该方法不存在父类中,那么编译器会报错。

类方法

如果子类声明了一个与父类相同签名的类方法,子类隐藏了父类的方法。
隐藏和覆盖的区别具有很大的意义。覆盖方法的调用版本就是子类的方法。隐藏方法的调用版本,依赖于它是被父类调用,还是被子类调用。

下面有个例子,演示对象实例方法和类方法的区别,第一个类是Animal

public class Animal {
public static void testClassMethod() {
System.out.println("The class" + " method in Animal.");
}
public void testInstanceMethod() {
System.out.println("The instance " + " method in Animal.");
}
}

第二个类是Cat,它是Animal的子类:

public class Cat extends Animal {
public static void testClassMethod() {
System.out.println("The class method" + " in Cat.");
}
public void testInstanceMethod() {
System.out.println("The instance method" + " in Cat.");
} public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = myCat;
Animal.testClassMethod();
myAnimal.testInstanceMethod();
}
}

Cat类覆盖了Animal的实例方法,并隐藏了它的类方法。结果输出如下:

The class method in Animal.
The instance method in Cat.

和之前所说的一样,由于是通过父类调用隐藏方法,所以隐藏方法的调用版本是父类。而覆盖方法的调用版本是子类的方法。

修饰符

覆盖的访问修饰符可以允许扩大,但不允许缩小。例如,一个protected对象方法,可以在子类中修改为public,但不能是private。否则代码会在编译时出错。

方法覆盖和隐藏小结

下面的表格总结了在子类声明了一个与父类签名一样的方法的各种情况

  Superclass Instance Method Superclass Static Method
Subclass Instance Method Overrides Generates a compile-time error
Subclass Static Method Generates a compile-time error Hides

java变量和方法的覆盖和隐藏(翻译自Java Tutorials)的更多相关文章

  1. Java类成员(成员变量和方法)的覆盖与隐藏归纳

    以前就知道重写override和重载overload的区别,平时也是逮着用就是了,Eclipse报错再说. 最近看一本书里面出现了重写.替换.覆盖.置换.隐藏.重载,简直乱得不行,归纳整理一下. 从全 ...

  2. Java_类和对象(完美总结)_转载_覆盖和隐藏的区别,覆盖就不能使用了,而隐藏提供全局方法名或者全局变量名还可以使用

    转载自海子:http://www.cnblogs.com/dolphin0520/p/3803432.html Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封 ...

  3. c#和java中的方法覆盖——virtual、override、new

    多态和覆盖 多态是面向对象编程中最为重要的概念之一,而覆盖又是体现多态最重要的方面.对于像c#和java这样的面向对象编程的语言来说,实现了在编译时只检查接口是否具备,而不需关心最终的实现,即最终的实 ...

  4. 测试 Java 类的非公有成员变量和方法

    引言 对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的 ...

  5. jsp中把js变量赋给java变量,或者将java变量赋给js变量怎么做?

    在jsp中经常会遇到把js变量赋给java变量,或者将java变量赋给js变量的情况,在此将通用的处理方法小结如下: java变量传给js好办,var a=”<%=javaParam%>“ ...

  6. 乐字节Java变量与数据类型之一:Java编程规范,关键字与标识符

    大家好,我是乐字节的小乐,这次要给大家带来的是Java变量与数据类型.本文是第一集:Java编程规范,关键字与标识符. 一.编程规范 任何地方的名字都需要见名知意: 代码适当缩进 书写过程成对编程 对 ...

  7. JAVA类的创建: 创建JAVA的类 ,JAVA的字段,JAVA类的方法

    1. 创建Java的类 如果说Java的一切都是对象,那么类型就是决定了某一类对象的外观与行为.可是类型的关键字不是type,而是class,创建一个新的类型要用下面的代码: 1 2 3 class ...

  8. Java调用WebService方法总结(1)--准备工作

    WebService是一种跨编程语言.跨操作系统平台的远程调用技术,已存在很多年了,很多接口也都是通过WebService方式来发布的:本系列文章主要介绍Java调用WebService的各种方法,使 ...

  9. 【aliyun】学java,看这里,不迷茫!1460道Java热门问题

    阿里极客公益活动: 或许你挑灯夜战只为一道难题 或许你百思不解只求一个答案 或许你绞尽脑汁只因一种未知 那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了 他们用户自己手中的技术来帮助用户成长 ...

随机推荐

  1. PHP历程(封装的增删改查方法)

    db.class.php   主要方法 <?php /** * 数据库配置信息 */ define('DB_HOST','127.0.0.1'); //服务器 define('DB_USER', ...

  2. Wiki上的Ue4文件结构以及命名规范

    https://wiki.unrealengine.com/Assets_Naming_Convention

  3. BZOJ3542:DZY Loves March

    询问是要求 $\sum_{i=1}^n((x[i]-a)^2+(y[i]-b)^2)(x[i]=a||y[i]=b)$ 即求 $\sum_{i=1}^n(x[i]-a)^2(y[i]=b)+\sum_ ...

  4. spring事务配置详解

    一.前言 好几天没有在对spring进行学习了,由于这几天在赶项目,没有什么时间闲下来继续学习,导致spring核心架构详解没有继续下去,在接下来的时间里面,会继续对spring的核心架构在继续进行学 ...

  5. BZOJ 2733 & splay的合并

    题意: 带权联通块,添边与查询联通块中第k大. SOL: splay合并+并查集. 我以为splay可以用奇技淫巧来简单合并...调了一下午终于幡然醒悟...于是就只好一个一个慢慢插...什么启发式合 ...

  6. sdoi 2009 & 状态压缩

    是不是平时在手机里玩吃豆豆游戏玩腻了呢?最近MOKIA手机上推出了一种新的围豆豆游戏,大家一起来试一试吧. 游戏的规则非常简单,在一个N×M的矩阵方格内分布着D颗豆子,每颗豆有不同的分值Vi.游戏者可 ...

  7. CART:分类与回归树

    起源:决策树切分数据集 决策树每次决策时,按照一定规则切分数据集,并将切分后的小数据集递归处理.这样的处理方式给了线性回归处理非线性数据一个启发. 能不能先将类似特征的数据切成一小部分,再将这一小部分 ...

  8. ACM Same binary weight

    Same binary weight 时间限制:300 ms  |  内存限制:65535 KB 难度:3   描述 The binary weight of a positive  integer ...

  9. 《DON'T MAKE ME THINK》/《点石成金访客至上的网页设计秘笈》 读书笔记

    1.web页面要尽可能简单,让用户不用思考就能知道页面的功能,如果要进行一些崭新的.开拓性的或者非常复杂的页面设计时, 此时要利用页面元素的外观.精心选择的名称.页面布局以及少量仔细斟酌过的文字,使页 ...

  10. ACM:统计难题 解题报告-字典树(Trie树)

    统计难题 Time Limit:2000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u Submit Status ...