类的加载和类的继承

引用:一种数据类型,背后含义指向一个对象。在我们的Java语言中,98%无法直接看到对象,看到的实际是引用。
对象的生命周期
1.new分配空间
2.初始化时期
3.活跃时期
4.被判定为死亡的时期
类的加载
1.发生在运行期间
2.从磁盘上把*.class文件(类字节码文件)载入到内存中的过程 类加载器(ClassLoader)
3.类被加载到内存的方法区
4.加载的是类的方法语句数据,静态属性,元信息
5.类的加载时机:懒加载(延迟加载) ,需要的时候才加载
6.哪些情况下类会被用到? 1)new对象 2)访问静态属性/方法 3)反射
7.静态属性的初始化顺序: 按照书写顺序执行 (定义时初始化,静态代码块)
编译期间
做的是,将源文件(.class)转化(编译Compile) 为类字节码文件(.class)
编译期间运行不是我们源代码,而是javac程序,我们的源代码只是作为别人程序的一个输入而已。
运行期间
运行的是java…,运行的是我们的程序,java会启动JVM 虚拟机
类的继承
面向对象的三大特征:
1.封装 访问限定符
2.继承
继承–>目的:代码的复用性,懒得写代码,继承要表达的是一种有关系的类
class Animal {void speak() {} } //动物类
class Bird{}
class Cat{}
继承的语法 类的定义
class Animal{} 父类(parent类),基类(Base类),超类(Super类)
class Bird extends Animal{}
子类(child) 派生类(Derived class)
方法的覆写(重写)Override 继承
子类重写了父类的 一个方法
方法名称相同,形参列表相同,返回类型要相同
特例:允许返回值类型是父类方法返回类型的子类
访问限定符:不能比父类的更封闭
方法的重载:方法名称相同,形参列表不同
方法的签名:方法名称+形参列表
覆写/重写(Override)
一定发生在子类上的,必须实现和父类
1.方法名称+形参列表+返回值类型相同的方法
2.目的:针对同一行为,表现出和父类不同的方式(例子:叫声)
3.访问限定符不能比父类的更严格(封闭)
4.一般建议使用@Override 注解修饰
5.IDEA可以用generate code
6.和重载(Override)做好区分
super关键字 可以和this对照看
1.super用来访问父类的构造方法
2.不是代表父类对象,可以抽象的去理解,执行属性中属于父类的那部分
super不是引用 明确调用父类的方法
class A{
public int a=10;
public void print() {sout(“父类的print”);}
}

                     class     B  extends   A{
                                                 public     int    a=100;
                                                 public    void    print() {sout("子类的print");}
                                                 public    void    test()  {super.a;super.print();}       
                                                 }        
                                                 
                     1.java中类的继承,只允许单继承
                     2.父类和子类之间的关系,涉及到super关键字
                                1.类加载的关系
                                         1)子类的加载必须触发父类的加载
                                               父类的加载 一定是发生在子类 的加载之前的
                                 2.对象实例化/构造的关系
                                           1)子类的对象的构造的过程会触发父类中属性的初始化过程
                                                  父类的属性初始化一定发生在子类属性的初始化之前
                                                  属性的初始化
                                                     1.定义时初始化+构造代码块按书写顺序
                                                     2.构造方法
                                                     和super调用父类构造方法的位置无关          
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值