1.访问修饰符
(1)private:只允许在本类内进行访问;
(2)public:只要能正确加载public成员所在的类型的对象,那么就可以通过这个类型的对象去访问到public成员;即允许在任意位置访问;
(3)protected:允许在当前类进行访问;同包中的子类可以访问(即子类会继承父类中的protected成员);不同包(跨包)的子类也可以访问(和同包的情况相同);同一个包中的其他类(非子类)可以访问;
跨包的非子类不能访问:
即protected说白了就是,同包中的任何类都可以访问;不同包时,只有子类才能访问。
(4)默认的访问权限,什么都不加:允许在当前类访问;跨包子类不允许访问;同包的子类可以访问;同包的非子类也可以访问;
即默认访问权限是,只有同包才能访问;不同包时,无论是否是子类都不可以访问;
注:对于什么业务场景,使用访问修饰符,这个需要在实际业务中提高选定能力。
2.子类重写方法的访问修饰符
子类重写的方法的访问范围要 >= 父类方法的访问范围;
注加:
注:20200922 (1)子类重写父类中的方法,要保持方法返回值类型不能变;(方法的重载,必须是方法的参数个数、顺序或类型不同才可以,,这样以后,重载方法的访问修饰符是什么就无所谓了)
3.super关键字
(1)super关键字基本用法
super.成员属性 或 super.成员方法:可以在子类中调用父类的成员;(当然得是子类有访问权限的成员)
如:(图片又臭又长,看个意思就行)
(注:当在子类中使用super关键字后,会在堆中新建一个父类对象的;其实,如果在子类中不写super,也会默认调用父类的无参构造方法的)
如果不使用super关键字,则是默认访问本类中的方法了:(就近?或子类已经重写了,当然选择子类的)
假如子类没有重写父类的eat()方法,其自然会“调用父类的eat()方法”,因为子类已经继承父类的eat()的方法了,虽然在子类中没有显示地写出eat()方法,但eat()已经是子类的成员方法了。(这样一看,上面的所谓就近的说法就是错误的了,子类继承父类的成员方法,子类可以选择重写,也可照搬不重写,无论如何,子类都有了父类成员方法的一个拷贝(说法可能不准确),不使用super关键字,调用的都是子类中的方法;;;只有使用了super关键字后才是调用的父类中的方法)
(2)super关键字不能在main()方法中使用
因为main方法时static修饰的静态方法,而在静态方法中无法预支对象;静态先于对象,this指示当前类对象,super指示父类对象。(在super的使用场景中,super(好像、大概、也许、可能)需要依附于一个对象,)
(这个还不太明白,,,,,)