Java学习14-对象类型转换(Casting)

基本数据类型的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),叫:向上转型

猜你喜欢

转载自www.cnblogs.com/su-peng/p/12449771.html
今日推荐