java多态、final、抽象abstract、接口

  • 多态:同一个对象在不同时刻体现出来的不同状态。

·        (1) 实现多态:有继承或者实现关系;有方法重写;有父类或者父接口引用指向子类对象。
          (2)多态的分类:
            a:具体类多态
                class Fu {}
                class Zi extends Fu {}
                
                Fu f = new Zi();
            b:抽象类多态
                abstract class Fu {}
                class Zi extends Fu {}
                
                Fu f = new Zi();
            c:接口多态
                interface Fu {}
                class Zi implements Fu {}
                
                Fu f = new Zi();
    (3)多态中的成员访问特点
        A:成员变量
            编译看左边,运行看左边
        B:构造方法
            子类的构造都会默认访问父类构造,对父类的数据进行初始化
        C:成员方法
            编译看左边,运行看右边;因为成员方法有重写,所以看右边
        D:静态方法
            编译看左边,运行看左边,静态和类相关,算不上重写,所以还是看父类

成员变量是外部特征所以在堆内存中访问super,成员方法是内部功能,所以访问堆内存的this
   (4)多态中的转型
        A:向上转型
            Fu f=new Zi();
            从子到父
        B:向下转型(把父类的引用强制转换为子类的引用 Zi z=(Zi) f)
            从父到子
            容易出现的一个错误叫ClassCaseException类转换异常

 

  • final:修饰局部变量是普通变量是是就相当于一个常量,无法在重新赋值改变,重新赋值就会报错,也就是只能赋值一次;

        当修饰局部变量引用类型时,其地址值不能变,也就是栈内存地址,但对象堆内存的值可以改变

       final修饰的类不能被调用,修饰的方法不能被重写

  • 抽象类

    (1)把多个共性的东西提取到一个类中,这是继承的做法。
       但是呢,这多个共性的东西,方法声明一样,但是每个具体的对象在具体实现的时候内容不一样。
       所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体。
       而一个没有具体的方法体的方法是抽象的方法。
       在一个类中如果有抽象方法,该类必须定义为抽象类。
    (2)抽象类的特点
        A:抽象类和抽象方法必须用关键字abstract修饰
        B:抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
        C:抽象类不能实例化,也就是不能创建对象,因为它不是具体的;可以通过多态的方式进行子类实例化
        D:抽象类的子类
            a:是一个抽象类。
            b:是一个具体类。这个类必须重写抽象类中的所有抽象方法。
    (3)抽象类的成员特点:
        A:成员变量
            有变量,有常量
        B:构造方法
            有构造方法。作用是用于子类访问父类数据的初始化
        C:成员方法
            有抽象:强制要求子类做的事,也就是要重写
            有非抽象:子类继承的事
        (4)abstract
            与final    冲突
            与private 冲突
            与static 无意义

  • 接口

    (1)就比如电脑的usb接口,是在usb接口中插入额外的东西,表示额外的功能。
    (2)接口表现形式
            interface 接口名 {}
        a:类实现接口用implements修饰
            class 类名 implements 接口名 {}
        b:接口不能实例化
        c::接口的实现类 (实现类一最好是接口名+Impl)
            a:是一个抽象类。
            b:是一个具体类,这个类必须重写接口中的所有抽象方法。
    (3)接口的成员特点:
        A:成员变量           
            只能是常量,变量也被默认为常量
            默认修饰符:public static final
        B:构造方法
            没有构造方法
        C:成员方法
            只能是抽象的即不能带主体
            默认修饰符:public abstrac

  • 抽象类和接口的区别

        A:成员区别
            抽象类:变量、常量,构造方法,抽象成员方法,非抽象成员方法
            接口:只可以是常量,只可以是抽象方法


        B:关系区别:
                             a:类与类:继承关系,只能单继承,可以多层继承
                             b:类与接口:实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时,实现多个接口
                             c:接口与接口: 继承关系,可以单继承,也可以多继承


        C:设计理念不同
            抽象类:is a,抽象类中定义的是该继承体系的共性功能。
            接口:like a,接口中定义的是扩展功能

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值