函数覆盖和重载区别:
1,重载。同一个类中。Overload 条件:函数名相同,参数列表必须不同,对返回值无要求
2,覆盖。子类中。Override 条件:函数名称与参数列表和返回值完全相同
注意事项:
1,子类方法覆盖父类方法时,子类权限必须要大于等于父类的权限。
2,静态只能覆盖静态,或被静态覆盖。
3.重载时如果子父类中函数名称相同,仅仅是返回值则不同绝不允许重载(编译报错,调用的不确定性)。因为重载是基于函数参数区别;
4.覆盖时函数的声明必须完全相同,包括返回值也必须一致。
①如果子父类函数名称相同而参数列表不同,则该方法就成了子类特有方法,不存在覆盖
②如果子父类函数名称和参数列表都相同而返回值不同,编译不通过
如图:父int show(int a)
子 short show(int a)
上图②这种情况出现在子父类中
这种情况如果出现在同一个类中就会出现调用的不确定性,不能实现重载,编译也会报错
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语句后面不能跟任何语句,因为执行不到
更多待补充.....