`

黑马程序员--java基础复习--子类父类变量特点(摘自CSDN)

 
阅读更多

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ---------------------

子父类出现后,类成员的特点:

  • 类中成员:
    • 1,变量。
      • 如果子父类中出现非私有的成员变量时,
      • 子类要访问本类的变量用this,
      • 要访问父类的变量用super,super代表的是父类的应用。
    • 2,函数。
    • 3,构造函数。
  • 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

0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics