Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

1.访问修饰符

(1)private:只允许在本类内进行访问;

(2)public:只要能正确加载public成员所在的类型的对象,那么就可以通过这个类型的对象去访问到public成员;即允许在任意位置访问;

(3)protected:允许在当前类进行访问;同包中的子类可以访问(即子类会继承父类中的protected成员);不同包(跨包)的子类也可以访问(和同包的情况相同);同一个包中的其他类(非子类)可以访问;

跨包的非子类不能访问:

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

即protected说白了就是,同包中的任何类都可以访问;不同包时,只有子类才能访问。

(4)默认的访问权限,什么都不加:允许在当前类访问;跨包子类不允许访问;同包的子类可以访问;同包的非子类也可以访问;

即默认访问权限是,只有同包才能访问;不同包时,无论是否是子类都不可以访问;

注:对于什么业务场景,使用访问修饰符,这个需要在实际业务中提高选定能力。

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

2.子类重写方法的访问修饰符

子类重写的方法的访问范围要  >= 父类方法的访问范围;

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;


注加:

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;


3.super关键字

(1)super关键字基本用法

super.成员属性   或   super.成员方法:可以在子类中调用父类的成员;(当然得是子类有访问权限的成员)

如:(图片又臭又长,看个意思就行)

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

如果不使用super关键字,则是默认访问本类中的方法了:(就近?或子类已经重写了,当然选择子类的)

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

假如子类没有重写父类的eat()方法,其自然会“调用父类的eat()方法”,因为子类已经继承父类的eat()的方法了,虽然在子类中没有显示地写出eat()方法,但eat()已经是子类的成员方法了。(这样一看,上面的所谓就近的说法就是错误的了,子类继承父类的成员方法,子类可以选择重写,也可照搬不重写,无论如何,子类都有了父类成员方法的一个拷贝(说法可能不准确),不使用super关键字,调用的都是子类中的方法;;;只有使用了super关键字后才是调用的父类中的方法)

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

Java继承二:访问修饰符;子类重写方法的访问修饰符范围应该更大;super关键字;

(2)super关键字不能在main()方法中使用

因为main方法时static修饰的静态方法,而在静态方法中无法预支对象;静态先于对象,this指示当前类对象,super指示父类对象。(在super的使用场景中,super(好像、大概、也许、可能)需要依附于一个对象,)

(这个还不太明白,,,,,)