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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天是基础班的最基础内容

day08回顾
    继承是?
        把多个类中的共性内容抽取出来,其他的类继承自该类,就可以使用这些
        
    继承特点
        子类不能使用父类私有成员
        只能单继承,但是支持多重继承
        
    this 和 super
        this 本类对象引用---在创建对象的同时就会有一个this产生
        super 是父类内存空间的标识(可以理解成父类对象的引用)
        
        变量
            this.变量名--使用本类成员变量
            suoer.变量--使用父类的成员变量
        成员方法
            this.方法名()--
            super.方法名()--使用父类方法(经常用来在方法的重写中国使用被覆盖掉的父类父类功能)
        构造方法
            this(具体参数)--根据参数匹配调用本类其他构造
            super(具体参数)--根据参数匹配调用父类中的构造
            --子类对象的构造方法内部默认第一行都有一个语句:super(),默认调用父类的无参构造
                作用:为了初始化父类中的数据
            
    重写与重载
        重写:子父类之间出现的方法声明(返回值类型,方法名,参数列表)完全一致
            子类的方法的访问权限必须大于等于父类
            父类的私有方法不能被重写
            静态只能被静态重写
            final修饰的方法不能被重写
            
    final关键字
        修饰类--不能被继承
        修饰方法--不能被重写
        修饰成员变量--其实是一个常量
        
    类变量和实例变量
        实例变量
            不加static修饰的成员变量--跟对象走
        类变量
            加static修饰的成员变量--跟类走

            
day09课程目标
理解多态的概念和前提
掌握多态的成员特点
理解多态的弊端和好处
掌握多态中的类型转换
理解抽象类、抽象方法和接口的由来
掌握抽象类的基本特点和成员特点
掌握接口的基本特点和成员特点
理解类与接口的关系
理解接口与抽象类的区别
理解接口的思想特点

多态概述
    多态:
        对象在不同时刻表现出来的不同状态
        (子类对象用父类接收)
        即父类(父接口)引用指向子类对象
        
    针对引用数据类型
        编译期间状态
        运行期间状态
        
    举例:水:(水,冰,水蒸气)
            狗:狗是狗,狗是动物,狗是宠物,狗是宠物
    java中的多态可以简单的记成:父类子对象
    多态的前提:
        要有继承或者实现关系
        要有方法的重写或者实现(多态就体现在方法上)
        要有父类引用指向子类对象
   
多态间的成员特点
    成员变量:
        编译看左边,运行看左边
    成员方法:有重写
        编译看左边,运行看右边
        产生这种现象(运行时看的地方不一样)的原因就是:方法有重写。而变量没有。
        在多态中,父类引用其实指向的是一个子类对象,也就是说,真正干活或者说完成指定功能的子类对象,子类重写了该功能,
        对于该功能来说,他有区别于父类的实现,所以运行看右边(子类)。但是成员变量没有重写或者覆盖,也就是子类没有自己具体的实现,
        所以运行时还是看左边。
        
多态的弊端:
    继承弊端:强耦合(关联性太强)
   
    多态弊端:父类引用不能使用子类特有功能
        基本类型:隐式转换(小-大),强制类型转换(大-小)
        引用类型:向上转型(小-大),向下转型(大-小)        
            Fu fu = new Zi();//向上转型
            Zi z =(Zi)fu;//向下转型
            
    类型转换异常:ClassCastException
        原因:
            类型不匹配
            
            class Animal...
            class Cat extends Animal...
            class Cat extends Animal...
            
            Animal a= new Cat();//多态:向上转型
            
            a = new Dog();// 从新赋值
            
            Dog d = (Dog)a;//向下转型
            
            Cat c = (Cat)a;
            向下转型必训转换成对象原本的类型或者其父类型
            
多态的好处
    当我们需要创建很多对象时,对象创建越多重复代码越多
    把每一个调用的整体封装,然后传递变化的对象
    用发展的眼光来看待事物
    思路
        把行为封装成方法
        然后把方法封装成工具类
        在测试类中调用即可
        (还可以再改进,将多态引入,向上转型)
    多态好处:
        为了提高代码的扩展性和可维护性
        
        Animal a1 = new Cat();//多态
        Animal a2 = new Dong();//多态
        
        public void show(Animal a)//可以接收Animal的任何一个子类都可以
        {
            a.show();//重写--具体方法调用的是子类
            a.eat();
        }
        
        
抽象类:有相同方法,方法内容却不同,只有抽象方法
    抽象方法:
        只有方法声明没有方法体的方法。用关键字abstract来表示
        针对没有方法体的方法java提供了一种表示形式:抽象方法
        这时用关键字abstract来表示抽象
        at();
        
    抽象类
        如果一个类含有抽象方法,这个类被称为抽象类,用关键字abstract来表示
        abstract class A
        {
            public abstract eat();
        }
        
    特点
        抽象类抽象方法用关键字abstract表示
        有抽象方法的类一定的是抽象类(或者接口)
            抽象类中不一定有抽象方法(也可以为空)
        抽象类不能被实例化,要想实例化,必须使用具体的实现子类的对象
        子类继承自抽象类,要么子类继续抽象,要么就必须重写抽象类中的抽象方法
        
        抽象类的作用:
            强制要求子类必须完成某些功能(即重写父类中的所有抽象方法)
    抽象类的多态
        Animal a = new Dog();
        
抽象类成员特点
    成员变量:可以有成员变量也可以有常量
    构造方法:有构造方法,
        可以用于子类访问数据前对父类数据进行初始化
    成员方法:可以有抽象方法也可以有非抽象方法   
        抽象方法是为了强制要求子类实现某些功能
        非抽象方法是供子类继承,提高代码的复用性   
    不能和abstract共存的关键字都有:
        1.final:因为被final修饰的类不能被继承,被final修饰的方法不能被重写。
        2.private:因为被private修饰的方法不能重写,但是abstract方法要求重写。
        3.static:因为一个方法要是同时被static 和abstract修饰,那么这个方法就可以类名.方法名 调用. 但是此方法是抽象的,调用也无意义,所以就导致static 和abstract不能共存.

1 个回复

倒序浏览
该帖发错,版主看到后请删除,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马