
面向对象
封装
类: 模板
对象: 实例
引用,遥控器
构造方法
新建对象时执行
构造方法重载
this
this.xxx
this(...)
重载
同名不同参
继承
代码复用
子类对象
继承之后是有父类对象和子类对象绑定在一起作为一个对象
创建的时候先创建父类对象,再创建子类对象
调用成员时, 先找子类,再找父类
父类构造方法
先创建父类对象,先执行父类的构造方法
默认执行无参构造方法 super();
不存在无参构造,必须手动调用父类有参构造
多态
一致的类型
所有子类对象,都可以被当做一致的父类型处理
向上转型
向下转型
运行期类型识别 instanceof
对真实类型及其父类型判断,
抽象类
抽象方法作用; 为子类提供通用的方法定义
子类必须实现父类的抽象方法
抽象类不能创建对象
final
修饰: 常量 标识值不可变
final int a = 5;
final Point a = new Point(3,4);
a.x = 30; //对的
a = new Point(5,6); // 错的
a = null; // 错的
a 的属性可以变, 但 a 不能重新赋值
修饰: 方法,标识方法不能被子类重写
修饰: 类, 标识类不能被继承
system
String
static: 静态
静态属于类,不属于对象,
一个类, 被虚拟机加载到方法区
静态变量.保存在方法区'类'的内存空间中
调用静态成员时,用类名调动
System.out
Integer.MAX_VALUE
Math.random()
使用静态变量的原则
能不用就不用
静态是非'面向对象的'语法
子类能调用父类的静态变量,但不是继承,也不能重写
使用场景
共享的数据
工具的方法
Math.random()
String.ValueOf()
Intefer.parseint()
静态代码块中, 可以直接调用静态成员, 不能直接调用非静态成员
必须新建实例对象, 用实例来调用
静态初始化块
class A{
static{
静态初始化块, 在类被加载时,只执行一次
}
}
访问控制符
限制一个类, 或类中的成员的访问范围
类, 包, 子类, 任意
public 任何位置都可以访问
protected 只能在同包下访问,可以被子类继承
[default] 只能在同包下任意访问
private 只能在同类中访问
访问原则, 尽量小范围访问
public 不能随便修改,会影响其他引用public 的方法
缩小访问范围, 更便于代码的维护和修改,
成员变量一般都设为私有,其默认是 default 同包下访问
可以使用公开的方法来控制变量的赋值及访问
如果类中的成员变量非常多, 为了同包下调用方便,
可以选择 [defaule]
如果希望子类继承这个变量, 可以选择protected(受保护的)
对象的创建过程
内存
方法区: 类, 静态变量
堆: 对象,
栈: 变量,