面向对象三大基本特征:
-
封装(Encapsulation):可以理解为打包,将类内部的属性和具体实现方式隐藏,只对外提供公共访问方式。
-
继承(Inheritance): 继承可以使得子类具有父类的非私有属性,调用父类的非私有方法。并且子类可以重新定义、追加属性和方法,提高了代码的重用率。
-
多态(Polymorphism): 父类引用指向子类对象,提高代码的灵活性。
1.定义类
基本语法:
public class ClassName{
//成员变量
//成员方法
}
2.成员变量
基本语法:
【修饰符】 Class 类名{
【修饰符】 数据类型 属性名; //属性有默认值
【修饰符】 数据类型 属性名 = 值; //属性有初始值}
2.1成员变量(实例变量)和局部变量的区别:
1. 定义的位置不同:
局部变量定义在方法里
成员变量定义在类里方法外
2. 作用域不同: 变量能够被访问到的区域
局部变量只能在当前定义它的方法里访问
成员变量可以在本类访问
作用域: 全局作用域,局部作用域(方法作用域,块级作用域)
3. 存储的位置也不同(重点)
局部变量存储在栈区
成员变量存储在堆区(重点)
4. 默认值不同
局部变量如果不赋值,没有默认值,不能使用
成员变量如果不赋值会有默认值
byte/short/int/long --> 0 float/double-->0.0 char-->\u0000
boolean --> false 引用数据类型 --> null
5. 生命周期不同
局部变量方法调用时创建局部变量,方法执行完成以后,局部变量销毁
成员变量对象创建时创建成员变量,对象销毁时,成员变量销毁
3.对象的内存存储
public class OOPDemo2 { public static void main(String[] args) { Dog d = new Dog(); System.out.println(d.name); //null System.out.println(d.age); //0 } } class Dog{ String name; int age; }
- 一个对象调用一个方法内存图
- 两个对象调用同一个方法内存图
- 将一个对象当做参数传入时的内存图