1.访问修饰符

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

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

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

跨包的非子类不能访问:

ios 重写子类方法 重写子类的修饰符范围_父类

ios 重写子类方法 重写子类的修饰符范围_super关键字_02

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

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

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

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

ios 重写子类方法 重写子类的修饰符范围_ios 重写子类方法_03

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

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

ios 重写子类方法 重写子类的修饰符范围_父类_04

ios 重写子类方法 重写子类的修饰符范围_子类_05


注加:

ios 重写子类方法 重写子类的修饰符范围_父类_06

注:20200922 (1)子类重写父类中的方法,要保持方法返回值类型不能变;(方法的重载,必须是方法的参数个数、顺序或类型不同才可以,,这样以后,重载方法的访问修饰符是什么就无所谓了)


3.super关键字

(1)super关键字基本用法

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

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

(注:当在子类中使用super关键字后,会在堆中新建一个父类对象的;其实,如果在子类中不写super,也会默认调用父类的无参构造方法的)

ios 重写子类方法 重写子类的修饰符范围_子类_07

ios 重写子类方法 重写子类的修饰符范围_ios 重写子类方法_08

ios 重写子类方法 重写子类的修饰符范围_父类_09

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

ios 重写子类方法 重写子类的修饰符范围_父类_10

ios 重写子类方法 重写子类的修饰符范围_super关键字_11

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

ios 重写子类方法 重写子类的修饰符范围_super关键字_12

ios 重写子类方法 重写子类的修饰符范围_父类_13

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

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

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