封装:将同一类事物的功能包装在一起,只对外提供访问接口
好处:
1. 实现专业的分工(你是使用者只需要关心怎么使用就行,无需了解具体实现细节)
2. 减少代码耦合(面向接口开发,互不干扰)
3. 可以自由修改类的内部结构(只要不影响使用者的功能,都可以随意改造)
继承:从已有的类派生出新的类,新的类可以有已有类的属性和行为,并拓展新的功能
多态:
多态是同一个行为具有多个不同表现形式或形态的能力
多态是同一个接口,使用不同的实例而执行不同操作
语法区别:静态变量前要加static关键字,实例则不用
隶属区别:实例变量属于某个对象的属性,而静态属于类
运行区别:静态变量在JVM加载类时创建,实例变量在实例化对象时创建
位置区别:静态变量存放在JVM方法区,无法被回收;实例变量存放在堆中,不用就被回收
父子类实例化过程分析
public class Parent {
private static String name = initName();
private int age = initAge();
private static String initName(){
System.out.println("1父类静态变量初始化");
return "程序员Forlan";
}
private int initAge(){
System.out.println("2父类普通变量初始化");
return 100;
}
static {
System.out.println("3父类静态代码块");
}
{
System.out.println("4父类非静态代码块");
}
public Parent(){
System.out.println("5父类构造函数");
}
}
public class Son extends Parent{
private static String name = initName();
private int age = initAge();
private static String initName(){
System.out.println("6子类静态变量初始化");
return "程序员Forlan";
}
private int initAge(){
System.out.println("7子类普通变量初始化");
return 100;
}
static {
System.out.println("8子类静态代码块");
}
{
System.out.println("9子类非静态代码块");
}
public Son(){
System.out.println("10子类构造函数");
}
}
public static void main(String[] args) {
new Son();
}