现在的位置: 首页 > 综合 > 正文

对象多态性的使用,对象的向上与向下转型,instanceof关键字的主要作用

2014年01月21日 ⁄ 综合 ⁄ 共 2004字 ⁄ 字号 评论关闭

对象多态性的使用,对象的向上与向下转型,instanceof关键字的主要作用

l         多态性

n         方法的多态性(同一个方法根据传入的参数不同 完成的功能也不同)

n         对象的多态性 (子类对象与父类对象之间的相互转换)

·子类对象向父类对象转换(由大到小) ---> 向上转型  自动转型(父类对象 =  子类对象)

·父类对象向子类对象转换(由小到大)----> 向下转型  强制转型(子类对象 = (子类)父类对象)

对象多态性是在继承应用上的一种扩展 因此程序要现有继承才能有多态

class A2 {

    public void fun1() {

       System.out.println("A2-->fun1");

    }

    public void fun2() {

       this.fun1();

    }

}

class B2 extends A2 {

    public void fun1() {

       System.out.println("B2-->fun1");

    }

    public void fun3() {

       System.out.println("B2-->fun3");

    }

}

public class Demo02_ {

    public static void main(String[] args) {

       //子类对象为父类实例化,此时a2 指向的是 堆内存中的子类开辟那部分空间

       A2 a2 = new B2();

       //fun1被子类覆写了

       a2.fun2();

       B2 b2 = (B2)a2;

       b2.fun2();

    }

}

//如果一个方法被子类覆写了 则子类和父类发生转换时 自动调用已经被覆写过的方法

                                                                                   

      

1.      

    b2

堆内存

栈内存

A2 a2 =  new B2(); 如箭头所示 父类引用指向子类对象 但是a2只能看到 new A2()中的内容 看不到 B2

newA2()

 

 

 

 

 new B2()

的内容 虚线为 a2实际看到的内容

 


  a2

                                                                                           2. B2 b2 = (B2)a2  将父类对象强制转换为子类对象

                                                                                              此时 a2可以看到整个 B2的内容了

                                                                                                 

 

 

 


★★如果一个方法被子类覆写了 当子类和父类之间转型时 自动去调用已经覆写过的方法(子类的方法)★★

l         Instanceof  关键字

Instanceof的使用

· 对象 instanceof

· a instanceof B (如果对象 a  是类B的一个实例则返回 true 否则返回 false)

class A5 {}

class B5 extends A5 {}

public class Demo05_ {

    public static void main(String[] args) {

       //A5 a5 = new A5();

       A5 a5 = new B5();

       System.out.println(a5 instanceof A5);//true

       System.out.println(a5 instanceof B5);//true

    }

}

l         常见的两个异常 ClassCastException(两个对象之间没有任何关系而进行转换) NullPointerException 空指向异常

//从类A3的声明来看 根本看不出子类B3的存在

class A3 {

    public void fun1() {

       System.out.println("A3-->fun1");

    }

    public void fun2() {

       this.fun1();

    }

}

//B3的声明来看 可以看出父类A3的存在

class B3 extends A3 {

    public void fun1() {

       System.out.println("B3-->fun1");

    }

    public void fun3() {

       System.out.println("B3-->fun3");

    }

}

public class<

抱歉!评论已关闭.