day09
变量的分类:按照变量声明的位置划分
1,局部变量
2,成员变量
(1)实例变量:没有static修饰的属性
(2)类变量:使用static修饰的属性
局部变量和成员变量的区别
1,声明位置
局部变量的声明位置
(1)方法的形参列表
(2)方法体中
(3)代码块
成员变量声明的位置:类中方法、代码块等外面
2,初始化的方式
局部变量初始化
(1)形参的初始化必须在调用时由实参赋值
(2)其他局部变量必须手动初始值
成员变量初始化
(1)有默认值
(2)显示初始化
(3)构造器
(4)set方法可再次修改值
3,值的存储位置不同
局部变量:栈
成员变量:(1)实例变量:堆
(2)类变量:?
4,生命周期
局部变量:短
当代码执行到局部变量声明处开始,到它的作用域结束
成员变量:相对长
随着对象的创建而创建,随着对象被垃圾回收而消亡;每个对象的成员变量是独立的
5,修饰符不同
局部变量:final
成员变量:权限修饰符(4个),static,final,volatile等
二,继承(extends)
概念:延续、保留、并且扩展
1,继承的目的(好处)(意义):
代码的复用、代码的扩展、可以表示事物之间is-a的关系。
2,继承的语法格式:
【修饰符】 class 子类 extends 父类{
}
3,继承的特点:
(1)Java只支持单继承
一个子类只能有一个直接的父类
(2)Java支持多层继承
一个子类的父类仍然可以有父类,子类可以继承所有“祖宗”类的所有属性、方法。
(3)一个父类可以同时有很多个子类,而且子类还可以有子类
(4)子类会继承父类所有的属性、方法,子类可以扩展父类没有的属性和方法
(5)子类不会继承父类的构造器,但是一定会在子类的构造器中去调用父类的构造器,默认在子类的构造器的首行,会通过"super()"去调用父类的无参构造;
如果父类没有无参构造,那么子类的构造器的首行需要用"super(实参列表)"去显式的调用父类的有参构造。
(6)如果一个类没有显式的继承其他类,那么它的父类就是java.lang.Object。
this和super关键字的用法
this:当前对象
(1)this.属性 当成员变量与局部变量重名时,可以在“成员变量”的前面加"this."进行区别。
(2)this.方法 表示访问当前对象的某个成员方法,完全可以省略"this."
(3)this()或this(实参列表) 用在构造器的首行,表示调用本类的其他构造器。
super:父类的
(1)super.属性 当子类的属性与父类的某个可见的属性重名时,想要在子类中去表示用“父类的属性”, 可以在“父类的属性”前面加"super."
(2)super.方法 在子类中去调用父类“被重写的方法”时,可以用"super."
(3)super()或super(实参列表) 用在子类构造器的首行,表示调用父类的构造器
三,多态(多种形态):针对方法
目的:使代码编写更灵活,功能更丰富
理解:
1,方法的重载和重写:一个功能有多种形式
2,对象的多态性
某个对象在Java中可能出现编译时类型和运行时类型不一致
多态的前提:
(1)类有继承关系
(2)方法的重写
(3)多态引用:父类的变量指向子类的对象
出现的对象的多态性的现象
按照父类的类型编译,运行时按照子类的类型运行,执行的方法是子类的方法体
多态的应用
1,多态数组:元素的类型是父类的类型,元素存的是子类的对象
2,多态参数:形参是父类类型,实参是子类类型
父子类之间类型转换
1,向上转型:自动完成
2,向下转型:强制完成
向下转型之前,一定发生过向上转型
注:父类的变量可以存储子类的对象:子类的变量不可以存储父类的对象
关键字:instanceof
为了避免转型失败,可以在转型之前加instanceof判断