【Java基础向】多态

来源:互联网 发布:品茗造价软件 编辑:程序博客网 时间:2024/06/05 20:55

方法签名:方法名+参数(个数,类型,顺序)

重写(override)-方法覆盖

子类重写父类方法,仅实例方法可被重写,成员变量和静态方法只能被隐藏(即子类声明同样的成员变量和静态方法,本质不是重写父类方法)

重写实例:父类Parent中有实例方法A,子类child定义了与A 相同签名和子集返回类型 的实例方法B,子类对象ChildObj只能调用自己的实例方法B。

方法的重写(override)两同两小一大原则:
1.方法名相同,参数(类型,个数,顺序)相同-不然就算重载
2.子类返回类型小于父类返回类型
3.子类抛出异常小于父类抛出异常
4.子类访问权限大于父类方法访问权限(例:public不能变为private,降低访问权限)

注意:重写方法可以改变其它的方法修饰符,如final,synchronized,native。不管被重写方法中有无final修饰的参数,重写方法都可以增加、保留、去掉这个参数的 final 修饰符(参数修饰符不属于方法签名)。

重载(overload)

在同一个类中,有多个方法名相同,参数列表不同(参数个数不同,参数类型不同,参数顺序不同),与方法的返回值无关(仅返回值不能区别两个同名,同参数的方法),与权限修饰符无关。编译器通过对方法签名的识别即可静态编译出不同的方法。这也是java中重载与重写的区别之一。

隐藏:只有成员变量(不管是不是静态)和静态方法可以被隐藏。

  • 成员变量

父类 Parent 中有成员变量 A ,子类 Child 定义了与 A 同名的成员变量 B ,子类对象 ChildObj 调用的是自己的成员变量 B。如果把子类对象 ChildObj 转换为父类对象 ParentObj ,ParentObj 调用的是父类的成员变量 A 。

1.隐藏成员变量时,只要同名即可,可以更改变量类型(无论基本类型还是隐藏类型)

2.不能隐藏父类中的 private 成员变量,换句话说,只能隐藏可以访问的成员变量。

3.隐藏父类成员变量 A 时,可以降低或提高子类成员变量B的访问权限,只要A不是 private。(protected->public)

4.隐藏成员变量与是否静态无关!静态变量可以隐藏实例变量,实例变量也可以隐藏静态变量。

5.可以隐藏超类中的final成员变量。

  • 静态方法
    父类 Parent 有静态方法 A ,子类 Child 定义了与 A 相同签名和子集返回类型 的静态方法 B ,子类对象 ChildObj 调用的是自己的静态方法 B 。如果把子类对象 ChildObj 转换为超类对象 ParentObj ,ParentObj 调用的是父类的静态方法 A。

隐藏后必须仍为静态方法

-

资料参考

0 0