---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ---------------------
子父类出现后,类成员的特点:
- 类中成员:
- 1,变量。
- 如果子父类中出现非私有的成员变量时,
- 子类要访问本类的变量用this,
- 要访问父类的变量用super,super代表的是父类的应用。
- 2,函数。
- 3,构造函数。
- 1,变量。
- super:父类对象。super关键字只能在子类内部使用,不能在非子类内使用
- 变量的特点
- 有了父类以后,内存中就变得不一样。
- 加载子类class文件前先加载父类class。
- 方法区分静态区、非静态区(存放方法), 非静态区中存放方法,父类、 子类 方法先后加载进方法区
- 对象在堆中建立。
- 内存中只有一个子类对象,
- 子类对象一new后分配属性空间:子类属性和父类属性。
- 子类中除了有this指向对象以外,还有super指向子类对象中的父类属性。
- 函数的特点
- 子类对象拿到了父类的函数,可以直接super调用。
- 子父类的函数一致时,使用子类的,这种特性叫重写(覆盖)。
- 当子类继承了父类,沿袭了父类的功能到子类中,子类虽具备该功能,但是功能却和父类不一致,这时保留父类的功能定义,重写父类内容。
- 在子类中super.函数可以添加上父类功能。
- 注意:
- 子类覆盖父类,必须保证子类权限大于等于子类权限,才可以覆盖,否则编译失败。
- 静态只能覆盖静态。牵扯到内存的先后加载问题。
- 重载:只看同名函数的参数列表,
- 重写:子父类方法要一模一样,比如返回值如果不一样是不允许的,JVM不知道掉用谁。
- 构造函数
- 构造函数 不会 存在重写,因为构造函数与类同名,子父同名类不允许出现。
- 子类对象初始化,会先执行父类构造函数。子类不显示调用父类构造函数的时候,子类的所有构造函数第一行隐式是super();调用父类空参数构造函数(非空参数的不会执行)。那么如果父类没有空参数的构造函数的时候,子类就也不能有空参数构造函数,因为没有父类的空参构造函数供其初始化。
- 为什么子类一定要访问父类构造函数?
- 因为父类中的数据,子类可以直接获取。所以子类对象建立时,需要先查看父类是如何对数据进行初始化的。
- 如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
- 简单来的说,就是子类需要父类初始化完后数据。
- 注意:
- super和this都需要定义在第一行。因为初始化动作需要先做。
- this在第一行不会影响super,因为this调用的是另一个构造函数,因为每一个构造函数第一句都是隐式调用super,所以子类中至少有一个构造函数会访问父类。
- 当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来制定要访问父类中的构造函数。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net