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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Animal 中级黑马   /  2015-6-1 22:15  /  448 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多态:
        概述:同一对象在不同时刻表现出来的不同状态。
        前提:
                A:要有继承(实现)关系。
                B:要有方法重写。
                C:要有父类(父接口)引用指向子类对象。
                        Fu f = new Zi();
                        解释:
                                Fu f:父类引用
                                new Zi():创建子类对象
        多态的成员特点:
                成员变量:编译看左边,运行看左边。
                成员方法:编译看左边,运行看右边。
                原因:方法有重写,而变量没有。

                父类:Fu
                        属性:num=20;
                        public void show();
                子类:Zi
                        属性:num=30;
                        public void show();
                测试类:
                        Fu f = new Zi();
                        f.num;
                        f.show();

多态弊端以及解决方案:
        弊端:父类引用不能使用子类的特有功能。
        解决方案:在子父类间进行类型转换。
        引用类型:
                向上转型:从小到大。
                向下转型:从大到小。
        在做类型转换的时候会遇到一个转换异常,是什么异常?
                ClassCastException:类型转换异常。
                原因:类型不匹配。
                解决方法:
                        重新new一个匹配的类型。

多态的好处:
        提高代码的扩展性和可维护性。
        举例:
                class AnimalTools
                {
                        public static void printAnimal(int a)
                        {
                                a.show()
                                a.method();
                        }
                }

       
猫吃鱼,狗吃肉。
抽象类:
        概述:有抽象方法的类。
        抽象方法:没有方法体的方法。用关键字abstract修饰。
                public abstract void show();
        基本特点:
                1、抽象方法或者抽象类必须用关键字abstract来修饰。
                2、有抽象方法的类一定是抽象类(或者接口),抽象类不一定有抽象方法。
                3、抽象类不能被实例化。
                        怎么实例化呢?
                                通过创建子类对象来对父类数据进行默认初始化。
                4、如果一个类A继承了抽象类。
                        两种情况:
                                第一种:类A本身也是抽象类。
                                第二种:类A重写父类的所有抽象方法。
                作用:
                        强制要求子类必须完成某些功能。

        成员特点:
                成员变量:可以是变量,也可以是常量。
                构造方法:可以有构造方法。
                        既然抽象类不能被实例化,要构造方法有什么用?
                                用于子类访问父类数据前,对父类数据进行初始化。
                成员方法:可以是抽象方法,也可以是非抽象方法。
                                抽象方法:强制要求子类必须完成某些功能。
                                非抽象方法:调高代码的复用性,来让子类继承的。

        思考下面提出的需求,要求学员如果能理解的话自己尝试写出代码,下午回来以后讲解。
        传智播客有两类老师:
                基础班老师
                        属性:姓名,年龄
                        行为:讲课(JavaSE)
                就业班老师
                        属性:姓名,年龄
                        行为:讲课(JavaEE)

        由于讲课内容不一样,但是都有讲课的功能。
        所以,我们把讲课抽取出来。定义一个Teacher类,强制要求其子类必须会讲课。
        接着来再定义一个基础班老师继承Teacher,一个就业班老师继承Teacher,最后在另外一个类中测试两个不同老师的成员。



接口:
        概述:比抽象类更抽象,所有的方法都是抽象方法。接口用关键字interface修饰。
        接口怎么使用?
                必须有具体的类来实现。
                格式:
                        class 类A implements 接口B
                        {

                        }
                习题:
                        接口:Animal
                                行为:eat()
                        子类:Dog
                        测试类:
                                用多态的方式来测试。
                       
                        interface Animal
                        {
                                public abstract void eat();
                        }
                        class Dog implements Animal
                        {
                                public void eat()
                                {
                                        System.out.println("狗吃肉");
                                }
                        }
                        class Test
                        {
                                public static void main(String[] args)
                                {
                                        //用多态的方式来测试。
                                        Animal a = new Dog();
                                }
                        }
        接口的基本特点;
                1、接口不能被实例化。
                2、接口中的方法:
                        第一种:要么被子类重写。
                        第二种:要么子类是抽象类(接口)。
        成员特点:
                成员变量:只有常量。
                        所有的成员变量都有默认修饰符:public static final
                构造方法:没有构造方法。
                        如果一个类没有继承自其他类,那么这个类默认就继承自Object类。
                成员方法:接口中只有抽象方法。
                        所有的成员方法都有默认修饰符:public abstract
       
                推荐:永远手动给出修饰符。                               
                总结:接口中有且只有常量和抽象方法。
        所有的类,都直接或者间接的继承自Object类。

类与接口之间的关系:
        类与类:继承关系。可以单继承,也可以多层继承。
        类与接口:实现关系。可以单实现,也可以多实现,
                        还可以在继承一个类的同时实现一个(多个)接口。
                        注意:多实现的时候,多个接口名之间用,隔开。
        接口与接口:继承关系。可以单继承,也可以多继承。
                        注意:多继承的时候,多个接口名之间用,隔开。

接口的思想特点:
        1、接口是对外暴露的规则。
        2、接口是程序对外的功能扩展。
        3、接口的出现降低了“耦合性”。
        4、接口可以多实现。
        设计原理:
                高内聚,低耦合。
                内聚:指的是类本身独立完成某些功能的能力。
                耦合:类与类之间的关系。
       
抽象类和接口的区别:
        1、成员特点
                抽象类:
                        成员变量:可以是变量,也可以是常量。
                        构造方法:有。
                        成员方法:可以是抽象的,也可以是非抽象的。
                接口:
                        成员变量:只能是常量。
                        构造方法:没有。
                        成员方法:只能是抽象方法。
        2、关系特点:
                类与类:继承关系,只支持单继承,可以多层继承。
                类与接口:实现关系。可以单实现,也可以多实现,还可以继承一个类的同时实现一个(多个)接口。
                接口与接口:继承关系。可以单继承,也可以多继承。
        3、设计理念的区别:
                抽象类:存的是整个继承体系的同性内容。(is a的关系)
                接口:存的是整个继承体系的扩展内容。(like a的关系)

                乒乓球运动员和乒乓球教练
                篮球运动员和篮球教练
                为了出国交流,乒乓球运动员和教练需要说英语。
                请你用所学知识,分析这里应该有哪些类,抽象类,接口。

步骤:
        分析:由具体的到抽象的。
                人类:抽象类
                        属性:姓名,年龄
                        行为:吃饭,睡觉
                       
                        运动员:抽象类
                                行为:练习

                                乒乓球运动员
                                篮球运动员

                        教练:抽象类
                                行为:指导

                                乒乓球教练
                                篮球教练

                接口:说英语
        实现:由抽象的到具体的。
        使用:使用具体的类。



5 个回复

正序浏览
来学习的!
回复 使用道具 举报
好详细啊。大神膜拜你啊 啊
回复 使用道具 举报
学习学习。挺详细的
回复 使用道具 举报
好详细啊。大神膜拜你啊 啊
回复 使用道具 举报
总结的不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马