-
protected 关键字
对于类的调用者来说, protected 修饰的字段和方法是不能访问的
对于类的 子类 和 同一个包的其他类 来说,
protected 修饰的字段和方法是可以访问的 -
Java 中对于字段和方法共有四种访问权限
1、private: 类内部能访问, 类外部不能访问
2、默认(也叫包访问权限): 类内部能访问, 同一个包中的类可以访问, 其他类不能访问.
3、protected: 类内部能访问, 子类和同一个包中的类可以访问, 其他类不能访问.
4、public : 类内部和类的调用者都能访问 -
final关键字
final 关键字也能修饰类, 此时表示被修饰的类就不能被继承
平时用的String类字符串类就是用final修饰的,不能被继承。
重写重载区别
普通方法可以重写, static 修饰的静态方法不能重写.
重写中子类的方法的访问权限不能低于父类的方法访问权限.
重写的方法返回值类型不一定和父类的方法相同(但是建议最好写成相同, 特殊情况除外).
重载与重写区别
1、概念重载:方法名称相同,参数的类型个数不同
重写:方法名称返回值类型、参数的类型及个数完全相同。
2、范围 重载:一个类
重写:继承关系
3、限制 重载无
重写:被覆写的方法不能拥有比父类更严格的访问控制权限
多态好处
使用多态的好处是什么?
- 类调用者对类的使用成本进一步降低.
封装是让类的调用者不需要知道类的实现细节.
多态能让类的调用者连这个类的类型是什么都不必知道, 只需要知道这个对象具有某个方法即可。
this与super区别
1、概念this:访问本类中的属性和方法
super:由子类访问父类中的属性和方法
2、查找范围:this:先查找本类,如果本类没有就调用父类。
super:不查找本类而直接调用父类
3、特殊this表示当前对象,super无。
抽象类
注意事项
- 抽象类不能直接实例化
- 抽象方法不能是 private 的
- 抽象类中可以包含其他的非抽象方法, 也可以包含字段. 这个非抽象方法和普通方法的规则都是一样的, 可以被重写,也可以被子类直接调用
抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法.
之所以要有抽象类存在, 是因为有些实际工作不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类了,使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题.
接口
接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法和字段.,而接口中包含的方法都是抽象方法, 字段只能包含静态常量.继承接口. 此时表达的含义不再是 “扩展”, 而是 “实现”。在调用的时候同样可以创建一个接口的引用, 对应到一个子类的实例
接口不能被单独实例化
扩展(extends)与实现(implements)
扩展指的是当前已经有一定的功能了, 进一步扩充功能.
实现指的是当前啥都没有, 需要从头构造出来.
接口的一些细节
- 我们创建接口的时候, 接口的命名一般以大写字母 I 开头.
- 接口的命名一般使用 “形容词” 词性的单词.
- 阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号,保持代码的简洁性。