多态
一个对象有多种形态,我们称它是多态。
特点:把子类对象赋值给了父类变量,在运行时期会表现出子类的特征。
多态运行时,还是new的对象本身
只有方法才存在多态,字段不存在多态,字段前面对象是什么类型,就调用谁的,在编译的时候,就已经确定去调用谁的
作用
当把不同的子类对象都当作父类类型来看待,可以屏蔽不同子类对象之间的实现差异,从而写出通用的代码达到通用编程,以适应需求的不断变化。使用了多态以后只需要写一个方法就能达到相同的功能。
如果没有在子类当中找到对应的方法,会去父类里面找
如果多态的方法全是静态的,那么编译的时候就要确定调用的类型,所以以多态的方式调用静态的方法,自动会调用父类当中的方法。
类的强制类型转换
把父类对象赋值给子类型
Dog dog=(dog)anim;
用instanceof可以判断一个类是否是指定的类,如果是返回true,不是就返回false
代码块
在类中或方法中使用{}括起来的一段代码,就称它是一个代码块
1.局部代码块,直接定义在方法内部的代码块(一般是结合if,while,for来进行使用)
2.初始化代码块:直接定义在类中的代码块,初始化代码块在运行时,还是把它放在构造方法中的最上方(创建一个对象就会执行一次)
3静态代码块:在初始化代码块前面加上一个static在什么时候执行:在加载字节码的时候就会自动调用,在主方法之前执行的,只执行一次。因为字节码只编译一次(前提是要和main函数一个类中)静态代码块通常用来做一次性操作
在代码块当中定义的变量我们称是局部变量,在外面是没有办法使用的
组合关系
自己类当中的字段是一个类的类型
类什么时候去加载:当第一次使用该类对象的时候,去加载到jvm当中
只加载一次,下一次就在内存当中使用了
类的加载
当第一次创建该类对象的时候,加载到内存中,在加载时,会执行static
字段初始化
静态字段初始化,是在静态代码块当中初始化的
非静态的字段初始化,它是在构造器当中做的初始化的(构造器的最前面)
final
继承的弊端:破坏了封装,子类可以访问父类当中的实现细节,可以覆盖父类当中的方法
final 最终,可以保证数据的安全性
字段:不能再去修饰该字段
方法:子类就不能再去覆盖该方法
类:该类就不能再去被继承
如果final修饰的是一个基本数据类型,代表值不能修改了
如果final修饰的是一个引用数据类型,代表地址不能去修改了(string是个特例)
字段
final段是没有初始值的,必须要自己手动设置初始值
final修饰变量,就代表是一个常量,命令规则:所有字幕都大写 命名规则:所有常量都要大写
final可以在局部代码块使用