Java引用变量有两个类型,一个是编译时类型,一个是运行时类型。编译时类型由声明该变量的使用类型决定,运行时类型由实际赋给该变量的对象决定。编译时与运行时类型不一样则多
Java引用变量有两个类型,一个是编译时类型,一个是运行时类型。编译时类型由声明该变量的使用类型决定,运行时类型由实际赋给该变量的对象决定。编译时与运行时类型不一样则多态。
多态是子类对象赋给一个父类引用变量,无须任何类型转换,或者被称为向上转型,向上转由系统自动完成。
相同类型的变量、调用同一个方法呈现出不同的特征,这就是多态。
class FatherClass{ public void method(){ System.out.println("父类方法"); } } public class SonClass extends FatherClass{ public void method(){ System.out.println("子类方法"); } public static void main(String[] args){ //多态 FatherClass fc = new SonClass(); fc.method(); } }
与方法不同,对象的实例变量不具有多态性。
class FatherClass{ int a = 100; } public class SonClass2 extends FatherClass{ int a = 10; public static void main(String[] args){ FatherClass fc = new SonClass2(); //输出100 System.out.println(fc.a); } }
强制类型转换
基本的数据类型转换只能在数值类型之间,引用类型转换必须是子类实例才行。
初始化块
使用初始化块
public class CHUSHIUHUAKUAI{ { //初始化块 } }
当创建Java对象时,系统总是先调用该类里定义的初始化块。
初始化块总是在构造器执行之前执行。系统同样可以使用初始化块进行对象的初始化操作。
如果初始化块使用static修饰,则这个初始化块编程静态初始化块,也被称为类初始化块。普通初始化块负责对对象执行初始化,静态初始化块负责对类进行初始化。
class FatherClass{ static{ System.out.println("父类静态初始化块"); } { System.out.println("父类普通初始化块"); } public FatherClass(){ System.out.println("父类构造方法"); } } public class SonClass3 extends FatherClass{ static{ System.out.println("子类静态初始化块"); } { System.out.println("子类普通初始化块"); } public SonClass3(){ System.out.println("子类构造方法"); } public static void main(String[] args){ SonClass3 sc = new SonClass3(); } }
执行顺序:父类静态初始化块, 子类静态初始化块, 父类普通初始化块, 父类构造方法, 子类普通初始化块, 子类构造方法。