java 对象转型小结

来源:互联网 发布:小学生英语阅读软件 编辑:程序博客网 时间:2024/05/16 05:34

一.对象的向上转型, 将子类的对象赋值给父类的引用:
 Student s = new Student();
 Person p = s; //向上转型
 1.以上:
 a)Person p = s; //向上转型
 b)Person p 是父类的引用。
 c)s 是子类的对象。
 d) Person是sdutent的父类。
 
 2.实例

a)通过继承关系的向上转型:
 class Person{
    int age;
    String name;
 
    public void intorduce(){
        System.out.println("Person intorduce" + age + "name : = "+name);
     }
 }
 
 class Student extends Person{
     String address;
 
  public void study(){
         System.out.println("Student study"); 
  }

     public void intorduce(){
       super.intorduce();
      System.out.println("Student address:=" + address);
  }
 }
 
  class Test{
     public static void main(String args[]){
          Student s  = new Student();
          Person person = s;
    
           person.name = "zhangsan";
           person.age = 20;
          //person.address = "address";  //不能调用子类的函数
          person.intorduce(); //指向student类里面的introduce()方法。
        //p.study();  //不能调用子类的方法
      }
 }

b)通过接口方式实现的向上转型

 interface Person{ 
    public void introduce(  int age, String name );

 }

 class Student implements Person{
     String address;
 
    public void study(){
         System.out.println("Student study"); 
    }

     public void introduce(int age, String name){
           System.out.println("Student introduce name:=" + name  +  " age : =" + age);  
      }
 }

class Test{

      public static void main(String args[]){

            Person person = new Student();

        //   person.address = "address"; //子类特有的成员变量,向上转型之后会被遗失

          // person.study();  //子类特有方法,向上转型之后会被遗失。

            person.intorduce(20, "张三");

     }

}


 
 3. 对对象的引用的话,需要注意:

1)一个引用能够调用那些成员(变量和函数),取决于这个引用的类型
 2)一个引用调用的哪一个方法,取决于这个引用所指向的对象。

 

4.向上转型,可以在继承关系和接口关系中实现。

5.向上转型, 需要注意的是

  1)向上转型时,子类会遗失除去与父类对象共有的成员方法之外的其他方法。  

   2)向上转型时,子类会遗失除去与父类对象共有的成员变量之外的其他变量。

6.向上转型的好处。

看上面的代码,

    public static void doIntorduce(Person person, int age, String name) {
        person.intorduce(age, name);
    }

这里以父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。不然的话,
如果doIntorduce以子类对象为参数,则有多少个子类就需要写多少个函数。这也体现了JAVA的抽象编程思想。


二.对象的向下转型, 将父类的对象赋值给子类的引用:
1.
   Student s1 = new Student();
   Person p = s1;  //向上转型
   Student s2 = (Student) p;  //向下转型

   先把一个对象向上转型,然后在把这个对象强制转换成要转换的类型。
2.实例
 class Person{
    int age;
    String name;
 
    public void intorduce(){
         System.out.println("Person intorduce" + age + "name : = "+name);
    }
 }
 
 class Student extends Person{
     String address;
 
  public void study(){
         System.out.println("Student study"); 
  }

     public void intorduce(){
       super.intorduce();
      System.out.println("Student address:=" + address);
  }
 }
 
  class Test{
     public static void main(String args[]){
          Student s  = new Student();
          Person p = s;
   
          //Person p = new Sdutent();

          //向下转型
         Student s = (sdutent)p;
     }
 }

原创粉丝点击