JAVA学习笔记之继承和父类子类实例变量的初始化内存分析图
2017-01-24 00:00
281 查看
面向对象的四种特点:
1.可复用,2.可维护,3.可扩展,4.灵活性强
继承 :
Why: 目的是复用代码,体现面向对象的可复用。当多个类定义相同的方法和属性时,为了不让相同的属性和方法重复写N遍,就可以吧这些属性和方法放到一个类中,其他类就可以扩展它,使每个类重复使用这个类的代码,这个过程体现啦可复用。
What: 扩展,extends相当于在原有类上添加新的属性,方法。不用重头开始写,直接复用以前类的方法和属性。当很多类中重复代码过多时,就可以单独定义一个类,这个类的内容就是这些重复的代码,然后其他类继承它。
被继承的类中属性,最好用protected修饰,表示子类可以访问。
How: public class SonClass extended FatherClass{
}
子类能不能访问父类的属性和方法,主要看访问权限修饰符。
Private 子类不可以访问,只可以是本类可以访问,子类不能继承。
Default 非本包不可以访问,即本包可以访问。本包子类可以继承,其他包子类不能继承。
Protected 受保护的,子类可以被继承。
父类 也叫 基类 ,超类。
子类 也叫 派生类,衍生类。
对象的初始化:
1.给实例变量分配空间,并默认初始化。
2.声明时是初始化,初始块初始化。
3.构造函数初始化。
面试题1:
子类对象中有没有父类中private修饰的实例变量?
答:其实是有的,继承不等于含有,创建子类对象时,底层隐式的创建父类对象,父类对象含有父类所有的属性(包含private),但是继承不等于含有。
如果是类变量,则也有。应为static 修饰的属性分配空间在方法区。
在子类中 要访问父类 就要用super
在new创建对象时,对于构造函数不是调用。在子类对象构造函数中有一个super(),这个函数提示父类使用父类的构造函数。Super()提示系统使用父类的无参构造函数。
Super的使用方法:
1.想访问父类对象的属性时。
2.提示系统使用父类的构造函数
super(); //提示系统使用父类的默认的构造函数
3.super.方法名();调用父类的方法;并保留父类行为
面试题2:同名属性的隐藏:如果子类定义一个和父类同名的属性时,这个子类对象将会对父类的同名属性进行隐藏。
真正的继承?
实例变量 可以使用this 直接访问 叫继承(我的)
继承对象初始化顺序(主要是实例变量):
父类对象:
2.给实例变量分配空间、默认初始化 3.声明时初始化、初始化块初始化 4.构造函数初始化
子类对象:
1.给实例变量分配空间、默认初始化 5.声明时初始化、初始化块初始化 6.构造函数初始化内存图:
2.
1.可复用,2.可维护,3.可扩展,4.灵活性强
继承 :
Why: 目的是复用代码,体现面向对象的可复用。当多个类定义相同的方法和属性时,为了不让相同的属性和方法重复写N遍,就可以吧这些属性和方法放到一个类中,其他类就可以扩展它,使每个类重复使用这个类的代码,这个过程体现啦可复用。
What: 扩展,extends相当于在原有类上添加新的属性,方法。不用重头开始写,直接复用以前类的方法和属性。当很多类中重复代码过多时,就可以单独定义一个类,这个类的内容就是这些重复的代码,然后其他类继承它。
被继承的类中属性,最好用protected修饰,表示子类可以访问。
How: public class SonClass extended FatherClass{
}
子类能不能访问父类的属性和方法,主要看访问权限修饰符。
Private 子类不可以访问,只可以是本类可以访问,子类不能继承。
Default 非本包不可以访问,即本包可以访问。本包子类可以继承,其他包子类不能继承。
Protected 受保护的,子类可以被继承。
父类 也叫 基类 ,超类。
子类 也叫 派生类,衍生类。
对象的初始化:
1.给实例变量分配空间,并默认初始化。
2.声明时是初始化,初始块初始化。
3.构造函数初始化。
面试题1:
子类对象中有没有父类中private修饰的实例变量?
答:其实是有的,继承不等于含有,创建子类对象时,底层隐式的创建父类对象,父类对象含有父类所有的属性(包含private),但是继承不等于含有。
如果是类变量,则也有。应为static 修饰的属性分配空间在方法区。
在子类中 要访问父类 就要用super
在new创建对象时,对于构造函数不是调用。在子类对象构造函数中有一个super(),这个函数提示父类使用父类的构造函数。Super()提示系统使用父类的无参构造函数。
Super的使用方法:
1.想访问父类对象的属性时。
2.提示系统使用父类的构造函数
super(); //提示系统使用父类的默认的构造函数
3.super.方法名();调用父类的方法;并保留父类行为
面试题2:同名属性的隐藏:如果子类定义一个和父类同名的属性时,这个子类对象将会对父类的同名属性进行隐藏。
真正的继承?
实例变量 可以使用this 直接访问 叫继承(我的)
继承对象初始化顺序(主要是实例变量):
父类对象:
2.给实例变量分配空间、默认初始化 3.声明时初始化、初始化块初始化 4.构造函数初始化
子类对象:
1.给实例变量分配空间、默认初始化 5.声明时初始化、初始化块初始化 6.构造函数初始化内存图:
2.
相关文章推荐
- java学习笔记_内存分析
- JAVA学习笔记之继承与初始化
- 学习笔记-java内存分析
- 【Java学习笔记之二十二】解析接口在Java继承中的用法及实例分析
- java学习笔记_类建立对象初始化过程分析
- 黑马程序员--Java基础学习笔记之抽象类和接口、内存结构分析、Java APIs
- java学习笔记-java jvm内存结构分析
- Java学习笔记-JVM内存分析
- Java学习笔记二十三:Java的继承初始化顺序
- 【Java学习笔记之二十二】解析接口在Java继承中的用法及实例分析
- Java学习笔记-类与对象(对象内存分析)
- Java 学习笔记 (13) - 基本内存分析 和 垃圾回收机制
- 2015.09.01 Java 学习笔记—内存分析精华
- Java学习笔记之继承与初始化
- Objective-C 学习笔记 - part 3 - 为对象分配内存并初始化
- objective-c学习笔记第五章《objective-c 继承与java中的区别》
- thinking in java 学习笔记(一) 接口于多重继承
- 学习Java.对于继承和多态的随堂笔记
- java学习笔记(二十二)继承的进一步研究
- java_croe 学习笔记之新IO---java.nio 之内存映射文件