Java面向对象

一、重载、覆盖与隐藏

  1.重载

  每个方法都有一个由方法名称和参数列表组成的签名,同一个类中不能出现相同签名的方法,对于相同名称但参数列表不同的方法称为重载。

  2.覆盖

  子类可以继承父类中除了构造方法之外的所有方法以及所有属性,当然对于父类中private的属性和方法,子类继承来了也是不能访问的;

  对于实例方法,在子类中如果出现一个和父类中继承来的方法相同签名的方法,则从父类中继承来的该方法被覆盖,在子类中覆盖父类中的方法时,不能降低方法的可见性,且返回类型与父类中方法返回类型相同或者是其子类型。使用覆盖是为了在子类中更改从父类中继承来的某个方法的默认实现;

  对于父类中private、final、static的方法,子类不能覆盖。

  3.隐藏

  对于父类中的属性,是没有覆盖这一说的,覆盖的概念是对于方法而言的,子类中若出现与父类中同名的属性,则父类中属性被隐藏了;

  4.对于private方法,若在子类中出现与父类中相同签名的方法,这并不是覆盖,实际上子类中的方法完全是另一个新方法。

二、this和super

  1. this

  类中每个非static方法都有一个隐藏的参数this,this指向当前调用方法的对象实例,因此当方法的参数名称和属性名称相同时,常使用this引用属性;

  this还有一个用法,是在构造方法的第一行调用类中其它的构造方法。

  2. super

  super用来在子类中引用父类中被覆盖的方法;

  super用来在子类中访问父类中被隐藏的属性;

  super用来在子类的构造方法中的第一行调用父类中的构造方法。

三、static关键字

  1.static属性

  static属性表示一个类的所有实例对象共享同一个属性,static属性可以直接通过类名访问。

  2.static方法

  static方法是一种不能向对象实施操作的的方法,static方法则没有隐藏的参数this,因此无法对对象实例做出修改,但是可以操作static属性和调用其他的static方法;

  static方法可以直接通过类名来调用,也可以通过实例对象来调用,普通方法必须通过实例对象来调用;

  static方法不能被覆盖。

参考资料 《Java核心技术》

原文地址:https://www.cnblogs.com/jqctop1/p/4657865.html