黑马程序员技术交流社区

标题: 今天学了多态,分享下笔记 [打印本页]

作者: wuzeshui    时间: 2016-1-20 22:39
标题: 今天学了多态,分享下笔记
多态
        什么是多态?
                对象在不同的时刻表现出来的不同的状态

        多态的前提条件是什么?
                要有继承或者实现这种关系
                要有方法的重写
                要有父类引用指向子类对象

        多态的代码体现?
                class Fu {
                        public void print() {
                                System.out.println("Fu");
                        }
                }

                class Zi extends Fu {//要有继承关系
                        public void print() {//要有方法的重写
                                Systme.out.println("Zi");
                        }
                }

                class Demo {
                        public static void main(String[] args) {
                                Fu fu = new Zi();//父类引用指向子类对象
                                fu.print();
                        }
                }

        多态间子父类之间成员变量的关系?
                父类中有一个成员变量,子类中有一个成员变量

                如果这两个变量的名字都不相同的话
                例:
                        class Fu {
                                int i = 1;
                        }

                        class Zi extends Fu {
                                int j = 2;
                        }

                        class Demo {
                                public static void main(String[] args) {
                                        Fu fu = new Zi();
                                        System.out.println(fu.i);//1
                                        System.out.println(fu.j);//编译报错
                                }
                        }

                如果这两个变量的名字都相同的话
                例:
                        class Fu {
                                int i = 1;
                        }

                        class Zi extends Fu {
                                int i = 2;
                        }

                        class Demo {
                                public static void main(String[] args) {
                                        Fu fu = new Zi();
                                        System.out.println(fu.i);//1
                                        System.out.println(fu.i);//1
                                }
                        }

                通过两个小案例分析出,父类引用不能使用子类特有的成员变量,如果使用,就会编译报错
                口诀:编译看左边,运行看左边

        多态间子父类之间成员方法的关系?
                父类中有一个成员方法,子类中有一个成员方法

                如果这两个方法的名字都不相同的话
                例:
                        class Fu {
                                public void printFu() {
                                        System.out.println("Fu");
                                }
                        }

                        class Zi extends Fu {
                                public void printZi() {
                                        System.out.println("Zi");
                                }
                        }

                        class Demo {
                                public static void main(String[] args) {
                                        Fu fu = new Zi();
                                        fu.printFu();//Fu
                                        fu.printZi();//编译报错
                                }
                        }

                如果这两个方法的名字相同的话
                例:
                        class Fu {
                                public void print() {
                                        System.out.println("Fu");
                                }
                        }

                        class Zi extends Fu {
                                public void print() {
                                        System.out.println("Zi");
                                }
                        }

                        class Demo {
                                public static void main(String[] args) {
                                        Fu fu = new Zi();
                                        fu.print();//Zi
                                        fu.print();//Zi
                                }
                        }

                通过这两个小案例,我们可以分析出,父类引用不能使用子类特有的成员方法,但可以使用子类重写的方法和父类特有的方法
                口诀:编译看左边,运行看右边

        向上转型和向下转型
                Fu fu = new Zi();(向上转型)

                Zi zi = (Zi)fu;(向下转型)

                向下转型解决了什么问题?
                        解决了父类引用不能使用子类里特有的成员变量和成员方法

                向下转型的弊端?
                        转不好容易报错,在运行的时候会报错,ClassCastException 类型转换异常

               









       


作者: Anmaker    时间: 2016-2-18 14:50
什么鬼~
作者: oassuperhan    时间: 2016-2-18 16:06
楼主是打算进第几期的JavaEE?
作者: diaokb    时间: 2016-2-21 17:05
顶              
作者: 苍山雪    时间: 2016-2-21 19:37
收                          




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2