- 权限修饰符
-
本类 同包类 不同包子类 不同包下的其他类
-
private T
-
default(默认) T T
-
protected T T T
-
public T T T T
- 注意:
- 以上权限修饰符只能修饰成员(static),成员修饰符(成员变量|成员方法)
- private的内容不能被继承
- 只有public和default能修饰类,并且default默认出现
- protected的访问权限:
-
1.同包下的类
-
2.不同包的子类,并且只能通过子父类关系访问,只有子类中才可以使用
==============================================================================================
重写 和 重载之间的区别:
- 重写和重载都是指方法
- 重载:
-
1.同一个类中有多个方法
-
2.方法名字相同
-
3.参数列表不同|方法签名不同
- 重写:
-
1.不同的类
-
2.继承关系|实现关系
-
3.方法签名相同(方法名+参数列表)
- 如果存在方法的重写,再调用的时候调用的是子类中重写的方法
- 重写方法会对父类中被重写的方法进行屏蔽
- 如何检查方法的重写:
-
1.左边会有一个向上的三角
-
2.强制检查 @Override
- == : 方法签名
- <= : 返回值类型 :基本数据类型完全相同 引用数据类型:子类<=父类
-
= : 权限修饰符:子类>=父类的权限修饰符
- 不能被重写:
-
1.被private修饰的方法不能被重写
-
2.被final修饰的方法不能被重写
-
3.被static修饰的方法不能被重写
-
如果子父类中的同名方法,父类中是静态的,子类中的同名方法要求也要被static修饰
==============================================================================================
super和this的区别:
- this 指代当前new的对象
- super 指代父类对象
- super用在构造器的首行调用父类中的构造器
-
super(参数列表)
-
必须要使用再首行,没有没有显示调用父类中其他构造器,默认调用父类空构造
- super区分子父类中同名的成员
-
如果不存在子父类中同名成员问题,可以省略,默认之类中的找子类,父类中的找父类
-
如果存在子父类中同名成员,并且想要调用父类中的成员,使用super表示父类对象,否则默认子类(就近原则)
- 创建对象是先父类后子类
- 先静态后成员
- final最终的
-
final修饰变量为常量
-
final修饰的方法不能被重写
-
final修饰的类不能被继承(太监类)
-
final修饰的是引用数据类型,对象的地址不能变,但是可以改变对象的成员
==============================================================================================
Object类(老祖宗)
- 是java中所有类的根据类
- java中的所有类都会直接或者间接的继承自Object类
- toString() 方法
-
当打印一个对象的引用时候,默认调用对象的toString()
-
当打印一个对象,其实是想要看对象的所有属性的值
-
重写toString()方法,自定义输出对象属性的内容,实现打印对象的属性值,不打印地址,默认打印的对象的地址,因为默认调用Object类型的toString()
==============================================================================================
equals 和 ==的区别
- == 比较对象的地址的是否相同
- equals如果子类中没有重写,默认调用Object类中的equals方法,比较的是地址,但是可以重写,自定义比较规则,按照内容比较对象是否相同
- 按照员工身份证号比较,如果身份证号相同就是相同
- 联系:根据person的id和姓名和薪资比较,如果都相同才是同一个对象
==============================================================================================
面向对象的三大特性之一------多态
- 多态:一种事物的多种形态,多种表示形式
- 多态的前提:
- 类的继承
- 接口的实现
- 多态的最终体现:
- 父类的引用指向子类的对象
- 多态的目的:
- 父类的引用在如果调用子父类中都有的方法,调用的是子类中重写的方法
- 子类的新增方法对父类引用不可见
- 多态使用成员:
- 成员变量: 编译运行看父类
- 成员方法: 编译看父类|类型|左边,运行看子类|找对象|右边
==============================================================================================
转型 cast
- java是一门强类型的语言
- 向上转型:(自动类型提升)
-
孔子装爹案例:
-
孔子类 class KongZi{int age=25;void teach(){论语};void play(){吃鸡}}
-
孔子爹类 class KongZiDie{int age=45;void teach(){做生意}}
-
有一个人来请孔子爹授课,孔子爹外出游玩,孔子化妆装成孔子爹 的样子去授课
-
KongZiDie zi=new KongZi(); --化妆-->向上转型 小范围类型->子类 大范围类型-->父类
-
zi.teach(); 真实去的人是孔子,所以讲的还是论语
- 向下转型:(强制类型转换)
-
目的:和学生一起玩吃鸡 使用子类独有的功能
-
卸妆: 从孔子爹类型变成孔子类型 大范围(父类)->小范围(子类)
-
小范围类型 引用=(小范围类型)大范围引用;
-
KongZi kong=(KongZi)zi;
-
kong.play();
-
可以调用子类中新增的方法
- ClassCastException 类型转换异常
- instanceof 运算符
- A instanceof B 判断A引用是否是B类型的对象|是否是B类型子类的对象,如果是返回true,如果不是返回false
-
编译的时候只检查A和B是否在一条继承连 上