1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。
3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
子类继承父类之后,可以拥有父类的某一些状态和行为
1.如果父类中的成员使用public来修饰,那么子类可以继承
2.如果父类中的成员使用protected修饰,子类也可以继承,即使父类和子类不在同一个包中。
3.如果父类中的成员使用private修饰,子类打死也不能继承,只能在父类中自己访问
4.如果父类和子类在同一个包中,此时子类可继承弗雷中缺省修饰符的成员
5.父类的构造函数和构造器,子类不能继承,因为构造器必须和当前的类名相同
方法覆写的原则:
1.实例方法签名必须相同,(方法签名,方法名,方法参数列表)
2.子类方法的返回值类型是和父类方法的返回值类型相同或者是其子类
3.子类抛出的异常要和父类相同或者是其子类(RuntimeException除外)
4.子类方法可以同时声明抛出多个属于父类方法声明抛出的异常类的子类
5.子类方法的访问权限要比父类方法的访问权限大,但是如果父类是private,那么根本不能继承所以就没法访问
子类初始化过程创建子类对象的过程
1.在创建子类对象之前,会创建父类对象。调用子类构造器之前会调用父类构造器。默认调用的是父类无参数构造器
2.如果父类没有提供无参数构造器,此时子类必须显示通过super语句去调用父类带参数的构造器
3.如果父类不存在可以被子类访问的构造器,则不能存在子类
super的隐藏:
1.满足继承的访问权限下,隐藏父类静态方法;若子类定义的静态方法的签名和父类中的静态方法签名相同,那么此时就是隐藏父类方法。注意:仅仅是静态方法
2.满足继承的访问权限下,隐藏父类字段:若子类中定义的字段和超类中的字段名相同,此时就是隐藏父类字段,此时只能通过super访问被隐藏的字段
3.隐藏本类字段:若奔雷中某个局部变量名与字段名相同,此时就是隐藏本类字段,此时只能通过this访问被隐藏的字段
super关键字的使用场景:
1.可以使用super解决子类隐藏了父类的字段情况,我们一般不讨论。因为破坏封装
2.在子类方法中,调用父类被覆盖的方法,引出super的例子,此时必须使用super
3.在子类构造器中,调用父类构造器。此时必须使用super语句