A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

多态:
        概述:事物存在多种形态。(大白话:同一事物在不同时刻,表现出来的不同状态)
        前提:
                1、要有继承关系,
                2、要有方法重写。
                3、要有父类引用执行子类对象。
                        Fu f = new Zi();
                        f.num;                //父类的
                        f.eat()                //子类的
       
        多态中成员的访问特点:
                成员变量:
                        编译看左边(父类),运行看左边(父类)。

                                编译只检查语法问题。
                成员方法:(类中的非静态成员方法) :动态绑定
                        编译看左边(父类),运行看右边(子类)。
                        大白话:编译时会去找父类中有没有这个方法,如果有,编译不报错,没有编译就报错。
                                        运行的时候,执行的还是子类的成员方法,原因很简单,因为方法有重写。

                静态方法:
                        编译看左边(父类),运行看左边(父类)。
                        原因:因为静态是和类相关的,算不上重写。

        多态中的向上,向下转型:
                向上转型: Fu f = new Zi();     // double d = 20; 这个叫隐式类型转换
                向下转型: Zi z = (Zi)f;                // int a = (int)d;这个叫强制类型转换

                               
                案例:
                        人类:
                                属性:姓名
                                方法:谈生意
                        超人继承人类:
                                属性:name
                                方法:
                                        谈生意
                                        fly();

                class Person{
                        String name = "jack";

                        public void 谈生意(){
                                System.out.println("谈生意");
                        }
                }
                class SuperMan extends Person{
                        String name = "superMan";
                        int age ;

                        public void 谈生意(){
                                System.out.println("谈一个大单子");
                        }
                        public void fly(){
                                System.out.println("我是超人,我会飞");
                        }
                }


                Person p = new SuperMan();
                p.name = "法海";
                p.谈生意();
                p.fly();


       
        多态的好处和弊端:
                好处:
                        1、复用性。
                        2、扩展性。
                        3、可以做为形参的数据类型,用来接收各个子类的对象。 (开发中较常用)
                                public void eat(Animal a){  // Animal a = new Cat();
                                        a.eat();
                                }
                        instanceof关键字:
                                格式:  对象名 instanceof 类名
                                作用:  判断前边的引用是否是后边的数据类型。
                                                (判断前边的对象是否是后边这个类的对象)
                弊端:
                        父类引用不能使用子类的特有属性和行为。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马