基本数据类型的Casting:
1.自动类型转换:小的数据类型可以自动转换成大的数据类型,如long g = 20; double d = 12.0f
2.强制类型转换:可以把大的数据类型强制转换(casting)成小的数据类型,如 float f = (float)12.0; int a = (int)1200L
对Java对象的强制类型转换称为造型
1.从子类到父类的类型转换可以自动进行
2.从父类到子类的类型转换必须通过造型(强制类型转换)实现
3.无继承关系的引用类型间的转换是非法的
例如:
1 package day14; 2 3 public class Test { 4 public static void main(String[] args){ 5 // int i = 10; 6 // long l = i;//自动类型转换,小转大 7 8 // long l = 10l; 9 // int i = (int)l;//强制类型转换 10 11 // Student s = new Student(); 12 // Person p = s;//从子类到父类自动转换类型 13 14 // Person p = new Person(); 15 // Student s = (Student) p;//从父类到子类的类型转换必须通过造型(强制类型转换)来实现 16 17 // Test t = new test(); 18 // Person p1 = t;//无继承关系的转换类型是违法的 19 20 } 21 }
再例如:从String到Object的自动转换
1 package day14; 2 3 public class Test { 4 public static void main(String[] args){ 5 6 //Object是所有类的最高父类 7 8 String s = "hello"; 9 Object obj = s;//从子类到父类的类型转换可以自动进行 10 System.out.println(obj); 11 } 12 }
打印结果为:hello
和从Object到String的强制类型转换
package day14; public class Test { public static void main(String[] args){ //Object是所有类的最高父类 // String s = "hello"; // Object obj = s;//从子类到父类的类型转换可以自动进行 // System.out.println(obj); Object obj = "hello"; String s = (String) obj;//从父类到子类的类型转换必须通过造型(强制类型转换)来实现 System.out.println(s); } }
打印结果为:hello
对象类型转换举例:先在Person类中创建test方法,在Student类中创建getSchool方法
package day14; public class Person { public void test(){ System.out.println("这是person的test方法"); } }
以及
package day14; public class Student extends Person { public void getSchool(){ System.out.println("这是student的getSchool方法"); } }
然后进行在test类中进行测试
package day14; public class Test { public static void main(String[] args){ Test t = new Test(); t.method(new Person());//传入Person对象并调用method方法 } public void method(Person e) { if(e instanceof Student){//判断e是不是一个Student对象 Student s = (Student) e; s.getSchool();//如果是,调用Student的getSchool方法 }else{ e.test();//反之,调用Person的test方法 } } }
打印结果为:这是person的test方法.
同样,也可以传入Student对象
package day14; public class Test { public static void main(String[] args){ Test t = new Test(); // t.method(new Person());//传入Person对象并调用method方法 t.method(new Student());//传入Student对象并调用method方法 } public void method(Person e) { if(e instanceof Student){//判断e是不是一个Student对象 Student s = (Student) e; s.getSchool();//如果是,调用Student的getSchool方法 }else{ e.test();//反之,调用Person的test方法 } } }
打印结果为:这是student的getSchool方法
总结:
1.较高级的基本数据类型转化为较低级的基本数据类型,叫:强制类型转换
2.较低级的基本数据类型转化为较高级的基本数据类型,叫:自动类型转换
3.父类(如:Person)转换为子类(如:Student),叫:向下转型(用instanceof进行判断)
4.子类(如:Student)转换为父类(如:Person),叫:向上转型