• 大数据第十二天


    抽象abstract类概述

    Java中使用“抽象方法”来解决这个问题,抽象方法的意思就是:只规定方法的签名,并不提供方法的实现,即:没有方法体。

    Java规定:只有方法签名,没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。

    样例:

    abstract class Animal{

        public abstract void move();

    }

    抽象类/方法特点

    抽象类和抽象方法必须用abstract关键字修饰

    • 抽象类定义

        abstract class 类名 {}

    • 抽象方法定义,在返回值前,或修饰符前加上abstract关键字
    • 方法没有方法体,即:没有{}

    abstract public void eat();

        public abstract void eat();

    抽象类不一定有抽象方法,有抽象方法的类一定是抽象类

    抽象类完全可以有成员变量和非抽象成员方法

     

    抽象类不能实例化

    抽象类的实例化按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态

    抽象类可以有构造方法,抽象方法是用来被子类调用的,程序员不能调用

     

    抽象类的子类--使用extends

    • 要么是抽象类,不完全实现其父类的抽象方法
    • 要么重写抽象类中的所有抽象方法,这个子类就是一个完全的实现类了,所以可以用来实例化对象

    抽象类,抽象方法定义时的非法组合

    • private abstract

    抽象方法依靠子类去实现,但是私有方法在类外就不能访问,也就无法实现

    • final abstract

    final修饰的方法不能被重写,而抽象方法就是需要子类实现,矛盾

    • static abstract

    抽象方法在本类中是没有方法体的,使用类名调用的时候调用的是没有方法体的方法,无作用

    总结,在abstract类中:

    成员变量

    • 可以是变量,也可以是常量(final)

    构造方法

    • 有构造方法,但是不能实例化(不能被显式调用,但JVM可以隐含调用)

        作用是用于子类访问抽象类数据的初始化

    成员方法

    • 可以有抽象方法 限定子类必须完成某些动作
    • 也可以有非抽象方法,用来提高代码复用性,子类可以继承

    接口interface的引入

    接口特点

    接口用关键字interface表示

    • 格式:interface 接口名 {}    //不能使用class关键字了

     

    类实现接口用implements关键字

    • 格式:class 类名 implements 接口名 {}

     

    接口没有构造方法,即:接口不能实例化

    • 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,接口多态。

     

    接口的子类

    • 可以是抽象类,用implements关键字,

    abstract class A implements ITest{}    //抽象类和接口之间用实现

    • 或者还是一个接口,用extends关键字

    interface A extends ITest{}        //接口和接口之间用继承

    • 是一个实现类,实现接口中的所有抽象方法,用implements关键字

        class B implements ITest{...}          //实现类和接口之间用实现

    小结:

        只有接口和接口之间使用的是extends关键字,抽象类和接口之间,实现类和接口之间都是用的implements关键字

    演示接口常规用法:

    1.接口不能实例化对象

    2.子类如果是实现类的话,就必须实现接口中定义的所有抽象方法

    3.子类如果不完全实现接口中的抽象方法,那子类就是抽象类

    4.接口和接口之间可以继承--extends

    接口成员特点

    成员变量

    • 只能是常量
    • 默认修饰符 public static final,其中的任何一个都可以省略,也可以全都省略

    构造方法

    没有,因为接口主要是扩展功能的,而没有具体存在

    成员方法

    • 只能是抽象方法
    • 默认修饰符 public abstract,可以省略其中之一,或者都省略。

    类与类,类与接口,接口与接口的关系

    普通类与普通类--extends

    • 继承关系,只能单继承,但是可以多层继承

    普通类与抽象类--extends

    • 继承关系,只能单继承,但是可以多层继承

    普通类与接口,抽象类与接口--implements

    • 实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口
    • 此时应注意:extends 写在前,implements写在后

    接口与接口--extends

    • 继承关系,可以单继承,也可以多继承

    抽象类和接口的区别

    定义时使用的关键字

    • 抽象类  abstract
    • 接口    interface

    成员区别

    • 抽象类     变量,常量都可以有;抽象方法,非抽象方法都可以有;可以有构造方法
    • 接口       只有常量;只有抽象方法;没有构造方法

    关系区别

    • 类与类            继承,单继承,多层继承
    • 普通类与接口       实现,单实现或多实现implements
    • 抽象类与接口       实现,单实现,多实现abstract class A implements IA,IB
    • 普通类与抽象类     继承,并实现全部抽象方法extends
    • 接口与接口         继承,单继承,多继承extends

    总结:

    在接口的各种关系中,只有接口和接口之间用的是继承,其余的和接口之间都是实现关系;

    1、抽样方式定义格式,抽象方法定义时修饰符有哪些非法组合?

    private abstract

    抽象方法依靠子类去实现,但是私有方法在类外就不能访问,也就无法实现。

    final abstract

    final修饰的方法不能被重写,而抽样方法就是需要子类实现,矛盾。

    static abstract

    抽样方法在本类中是没有方法体的,使用类名调用的时候调用的是没有方法体的方法,无作用。

    2、抽象类定义格式

    抽象类和抽象方法必须用abstract关键字修饰

    抽象类定义

    abstract class 类名{}

    抽象方法定义,在返回值前,或修饰符前加上abstract关键字

    方法没有方法体,即:没有{}

    abstract public void eat();

    public abstract void eat();

    3、抽象类是否必须有抽象方法?

    抽象类不一定有抽象方法,有抽象方法的类一定是抽象类。

    抽象类完全可以有成员变量和非抽象成员方法。

    4、抽象类中成员变量和成员方法有什么特点?

    成员变量:可以是变量,也可以是常量(final);

    成员方法:可以有抽象方法  限定子类必须完成某些动作;

         也可以有非抽象方法,用来提高代码复用性,子类可以继承。

    5、接口中成员变量和成员方法的特点?

    成员变量:只能是常量;默认修饰符public static final,其中的任何一个都可以省略,也可以全都省略。

    成员方法:只能是抽象方法;默认修饰符public abstract,可以省略其中之一,或者都省略。

    6、接口与接口,接口与抽象类,接口与实现类的关系,分别使用什么关键字?

    接口与接口——extends    继承关系,可以单继承,也可以多继承。

    接口与抽象类——implements  实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口。

                    此时应注意:extends写在前,implements写在后

    7、接口中成员变量默认的修饰符

    public static final

  • 相关阅读:
    将指定目录的所有文件及文件夹copy到指定目录下,只copy 7天内创建的或是7天内修改过的
    修复置疑态状态的数据库 重建数据库日志
    修改MYSQL最大连接数的3种方法
    [转载]RRDTool 中文手册简易入门(二)
    [转载]RRDTool 快速学习思维导图
    sql server 2008 新功能创建压缩表和索引
    分析src=http://s.see9.us/s.js>亦或3b3.org注入攻击及解决方案探讨....
    创建login帐号及为其添加安全权限
    计数排序 Counting Sort
    基数排序 Radix sort
  • 原文地址:https://www.cnblogs.com/zhaoyongcx/p/6624655.html
Copyright © 2020-2023  润新知