目录
权限修饰符:
如图所示:
权限修饰符总结:
- public 关键字: 修饰( 类、成员方法、成员变量、常量、内部类、构造器。) 访问权限最大,在整个项目中都可以访问public修饰的内容。不同项目中访问只需要导包即可。
- protected 关键字:修饰 (成员方法、成员变量、常量、内部类、构造器。)访问权限第二,在一个包中 两个类 不管是不是 子父类关系 都可以访问protected修饰的内容。不同项目中访问protected修饰的内容 那么这个类 就必须 要是它的子类,且需要导包才可以访问。不同包中类与类之间需要 具有继承关系才能访问。
- default(缺省,就是不写public、protected、private):修饰( 类、成员方法、成员变量、常量、内部类、构造器、构造代码块、普通代码块。)访问权限第三,在同一个包中都可以访问,如果在不同包中就不可以访问,就算是子类也无法访问父类中用 缺省修饰 的内容! (构造代码块只在本类中初始化对象的执行,普通代码块只在包类中的方法中执行!)
- private 关键字:修饰 成员方法、成员变量、常量、内部类、构造器。访问权限最低,被private修饰的内容 只能在当前类中访问。
- 实例变量一般用 private 修饰, 成员方法 一般用 public 修饰。
继承后的方法重写:
重写:
即 发生在子类和父类中,当子类对父类提供方法感到不满意,或者说父类提供的方法无法满足功能需求,如果还想用这个方法来满足功能需求,那么就需要对父类的方法进行重写!
方法重写后方法签名上面 的标志性注解:
方法重写(也叫方法覆盖)的注意事项:
- 方法重写有严格的格式要求:子类要重写的方法的方法名称、形参列表(个数、类型、顺序) 必须要和父类的完全一致!
- 子类要重写的方法的返回值类型如果父类被重写的方法的返回值是基本类型的话,必须和父类的返回值类型完全一致!
- 如果子类要重写的方法的返回值类型如果父类被重写的方法是引用类型的话,那么可以选择和父类被重写的方法的返回值类型完全一致 或者 子类要重写的方法的返回值类型 是 父类被重写的方法的返回值类型的子类! 比如: 父类的返回值类型是Object,那么子类重写后的方法的返回值类型可以是 String,HashMap等,看实际需求。
- 子类要重写的方法不能比父类被重写的方法的访问权限小,只能和父类的一样或者比父类的要大! public ---》 protected ---》 缺省。
- 子类要重写的方法声明抛出的异常应该比父类被重写方法声明抛出的异常一样,或者 子类要重写的方法声明抛出的异常 是父类被重写方法声明抛出的异常的子类。
- Java建议一般方法重写后 最好加上 @Override 注解,见名知意。方法一旦加了这个注解不报错,那么就是成功重写父类的方法。反之亦然。
父类不能被子类重写的方法:
- 父类中 用 权限修饰符 static 修饰的静态方法不能被子类重写,因为静态方法属于父类本身。子类只有权利调用父类中的共享给子类的静态方法,没有权利重写父类中的静态方法!
- 父类中 用 private 修饰的私有方法不能被子类重写,因为私有方法只能在父类本类中访问,子类虽然继承了,但是由于封装的特性导致子类无法访问重写。只有子类能直接访问到的实例方法才能够被子类重写。
- 如果子类中有方法 是和 父类的私有静态方法或者私有实列方法 签名是一样的,这种情况不叫方法重写 , 私有的方法不能够被重写! ,只能说,子类和父类它们之间产生了 方法签名 一模一样的方法了而已。 子类的方法仍然属于子类,父类的方法仍然属于父类,互不影响。加上 @Override 不报错才能说明父类中方法被成功重写!
- 父类中使用缺省修饰的 实例方法只能是和父类在 同一个 包中的子类才能重写,其他包中的子类不能重写!
方法重写和方法重载的区别:
如图所示: