基本数据类型的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 packageday14;2
3 public classTest {4 public static voidmain(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 packageday14;2
3 public classTest {4 public static voidmain(String[] args){5
6 //Object是所有类的最高父类
7
8 String s = "hello";9 Object obj = s;//从子类到父类的类型转换可以自动进行
10 System.out.println(obj);11 }12 }
打印结果为:hello
和从Object到String的强制类型转换
packageday14;public classTest {public static voidmain(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方法
packageday14;public classPerson {public voidtest(){
System.out.println("这是person的test方法");
}
}
以及
packageday14;public class Student extendsPerson {public voidgetSchool(){
System.out.println("这是student的getSchool方法");
}
}
然后进行在test类中进行测试
packageday14;public classTest {public static voidmain(String[] args){
Test t= newTest();
t.method(new Person());//传入Person对象并调用method方法
}public voidmethod(Person e) {if(e instanceof Student){//判断e是不是一个Student对象
Student s =(Student) e;
s.getSchool();//如果是,调用Student的getSchool方法
}else{
e.test();//反之,调用Person的test方法
}
}
}
打印结果为:这是person的test方法.
同样,也可以传入Student对象
packageday14;public classTest {public static voidmain(String[] args){
Test t= newTest();//t.method(new Person());//传入Person对象并调用method方法
t.method(new Student());//传入Student对象并调用method方法
}public voidmethod(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),叫:向上转型