面向对象__阶段总结__【覆盖与重载的区别】【继承,多态的一些细节】



函数覆盖和重载区别:

      1重载同一个类中Overload      条件:函数名相同,参数列表必须不同,对返回值无要求

       2覆盖子类中Override           条件:函数名称与参数列表和返回值完全相同

注意事项:

1,子类方法覆盖父类方法时,子类权限必须要大于等于父类的权限

2静态只能覆盖静态,或被静态覆盖。

3.重载时如果子父类中函数名称相同,仅仅是返回值则不同绝不允许重载(编译报错,调用的不确定性)。因为重载是基于函数参数区别;

4.覆盖时函数的声明必须完全相同,包括返回值也必须一致。

①如果子父类函数名称相同而参数列表不同,则该方法就成了子类特有方法,不存在覆盖

②如果子父类函数名称和参数列表都相同返回值不同,编译不通过

如图:int show(int a)

            子 short show(int a)

面向对象__阶段总结__【覆盖与重载的区别】【继承,多态的一些细节】_第1张图片

上图②这种情况出现在子父类中


这种情况如果出现在同一个类中就会出现调用的不确定性,不能实现重载,编译也会报错

int show(int a)

short show (int a)



子类覆盖父类方法时,只能抛出比父类更少的异常。或者是抛出父类异常的子异常,因为子类可以解决父类的一些问题不能比父类有更多的异常,子类访问权限只能比父类大,不能更小。

被覆盖的方法不能为private如果父类方法是private型,则子类不存在覆盖,相当于子类增加了一个新的特有方法,编译会报错!

private int show(int a)

子int show (int a)




多态时要注意的问题

父类类型的子类对象 不能访问子类中特有方法,可以通过覆盖来访问子类中子父类共有方法

多态时成员的特点

成员函数编译时看左边;运行时看右边

成员变量编译时和运行时都看左边


非静态内部类中不能定义静态成员,如果内部类定义了静态成员,该内部类必须被静态修饰


常用set(),get()的意义,this.x=x;将局部变量转化为成员变量,封装成对象在堆内存中,延长生命周期,

 

继承时一定要注意子类构造函数中第一行隐藏的super()父类构造函数

子类构造函数第一行一定是调用父类构造函数,不声明就默认调用了父类空参的构造函数。父类构造函数被复写为有参数,空参的构造函数super()就被隐藏了。如果子类构造函数中没有super(参数) 声明调用父类构造函数,就会编译失败。所以编程时建议应保留父类空参构造函数


多catch时父类异常一定要放在最下面

throw语句后面不能跟任何语句,因为执行不到



更多待补充.....




你可能感兴趣的:(JAVA个人总结,Java学习)