-
重载
(1) 重载通过不同的参数个数、不同的参数类型、不同的参数顺序实现区分
(2) 不能通过 方法的访问权限、返回值的类型、抛出的异常类型进行重载
-
覆盖
(1) 定义:派生类的函数覆盖基类函数
(2) 基类中的方法是private时,无论如何都不会被派生类重载(此时叫做定义了一个新函数)
(3) 满足以下条件时,才称为派生类的方法对基类的方法进行了__覆盖__
1° 函数名相同
2° 参数类型、顺序、个数相同
3° 返回值相同
4° 抛出异常的类型相同
-
重载和覆盖的区别
(1) 重载是同一个类中的关系;覆盖是基类和派生类的关系
(2) 重载时使用哪个函数由实参形式和形参形式决定;覆盖时使用哪个函数根据对象的类型(对象对应的存储空间类型)决定
示例
class Super { public int f() { return 1; } } class Sub extends Super { public float f() { return 1.0f; } }
此时会发生__编译错误__,因为既不是覆盖也不是重载, 调用 Super s = new Sub(); s.f()时会不知道调用哪个,所以拒绝编译
-
抽象类
(1) 抽象类定义一个抽象方法后,如果一个派生的具体实现类扩展了抽象类,那么它必须实现基类的所有抽象方法,且必须有相等或更广的访问权限(例如基类是default,派生类可以是default、protected或public,但是不能是private
(2) 抽象类中不能和abstract连用的关键字:
1° private:此时派生类永远没有机会实现它,没有意义
2° static:静态方法属于这个类本身,不需要实例;而抽象方法本身就是交给派生类去实现的,需要实例,两者矛盾(一个必须要有具体实现,一个交给派生类一定不能有具体实现)
3° native:native和abstract单独作用时都是只有定义没有方法体,使用native时交给的是本地操作系统,使用abstract交给的是子类,一并使用会产生矛盾
4° synchronized:没有具体实现,基类添加同步没有意义
chapter04_Java基础知识_6_重载和覆盖,抽象类和接口
最新推荐文章于 2024-01-03 14:31:53 发布