• 十、Java基础---------面向对象之抽象类与接口


    抽象类(abstract)    

         当编写一个类时,时常会为该类定义一些方法,这些方法的使用用以描述该类的行为方式,那么这些方法都有具体的方法体。但是在某些情况下,某个父类只是知道子类应该包含怎样的方法,但是无法精确的知道这些子类是如何实现这些方法,例如定义一个GetTime类,该类提供了一个计算某一段程序运行时间的gettime方法,但是无法知道具体运行什么方法体,这时就需要使用抽象方法来实现了。

    抽象类概念

         当多个类中出现相同功能,但是功能主体不同,这时候可以进行向上抽取,只抽取功能定义,而不抽取功能主体。分析事物不确定时,就抽象。

    特点:

         1.抽象方法只能定义在抽象类中。

         2.抽象方法和抽象类必须被abstract修饰

         3.抽象类不可以用new 创建对象,因为创建对象没有意义

         4.抽象类中的抽象方法要被使用,必须由子类复写抽象方法后,建立子类对象调用

         5.如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。如果不想子类是抽象类必须,复写父类抽象类中的全部抽象方法。

    特殊

        抽象类中可以不定义抽象方法,这样做仅仅是为了避免建立本类对象

    什么时候使用抽象:

         抽象类和一般类没有太大的区别,当事物出现不确定的功能,需要明确指出,但是无法定义主体,通过抽象方法来表示

         抽象类比一般类多了个抽象方法抽象类不可以实例化,抽象类中还可以定义非抽象方法,目的是不让该类建立对象

    抽象类成员

         抽象类可以包含 普通方法、 成员变量、 构造方法

    抽象格式特点

         在需要抽象的方法上用abstract进行修饰,同时该方法没有方法体,结尾';'结尾。

    应用:

         下面程序展示了用抽象定义一个获取某一段程序运行时间的方法。

        abstract class GetTime

        {

            public final void gettime()

            {

                long start = System.currentTimeMillis();

                 runcode();//调用指定方法

                long end = System.currentTimeMillis();

                System.out.println(end-start);//定义获取程序运行时间的抽象方法,子类需要覆盖该方法

            }

            public abstract void runcode();

        }

        class Subtime extends GetTime{

            public void runcode(){//子类覆写抽象方法,该方法体即为需要计算运行时间的方法

                for(int x=0;x<1000;x++){

                    System.out.println(x);

                }

            }

        }

    注意事项:

         不能与 final 一起使用:抽象是用来继承的所以不可以与final同时使用。

         不能与private一起使用: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。而抽象方法出现的就是需要被复写。

         不能与 static 一起使用:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。可是抽象方法运行没意义。

         抽象类该怎样描述事物就怎么描述,只是有一些内容"看不懂",所以可以有包含成员变量与方法,构造方法。

         如果一个类中存在抽象方法,那么该类一定要用abstract修饰(该类一点是抽象类)

    接口(interface)

         由于电脑买的比较早,硬盘的容量很小,随着时间的推移慢慢的感觉到存储容量的压力,但是电脑为我提供了一个USB接口,由于USB接口的存在,我买一个移动硬盘就很好的解决了硬盘容量不足的问题,假设如果没有USB接口要想解决这个问题就需要更换硬盘,或者换电脑其弊端大家很容易就明白了。这里我们说的接口和要介绍的程序接口道理是相通的。

    接口概念

         接口定义了一系列规范,想要实现某一个功能就必须遵守该规范,也就是说是 要想实现某一个接口,就must be按照使用接口的规范(读者反馈,谢谢)

         初期理解,可以认为是一个特殊的抽象类当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。

    特点

         1,接口中可以定义:常量,抽象方法。

         2,接口中的成员都有固定修饰符:

               常量:public static final

               方法:public abstract

    记住:接口中的成员都是public的。

        3,接口不可以创建对象

    接口作用

        1,接口是对外暴露的规则

        2,接口是程序的功能扩展

        3,接口的作用主要是为了统一访问

    什么时候使用接口

         当使用一个函数(暂且说是函数吧)时,但是函数的主体不确定,只是定义该方法的规范比如返回值,参数列表时,这是就应该考虑使用接口区定义。

    接口的成员

         常量,抽象方法。

    接口格式特点

         在生命一个类是接口时不再吃用class 而是使用 interface去定义。

    注意事项

         接口:是不可以创建对象的,因为有抽象方法。

         需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。否则子类是一个抽象类。

         接口可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。

         接口之间关系为继承,需要特别声明的是接口之间允许使用多继承所以从这个角度来说 java支持多继承

    应用实例

        interface A {

            void methodA();

        }

        interface B

        {

            void method();

        }

        interface C extends B, A {

            void methodC();

        }

    抽象与接口区别

        抽象

             1、抽象类是可以有私有方法或私有变量的,实现抽象类可以有选择地重写需要用到的方法,

                但是必须实现里面所有的抽象方法。

             2、抽象类在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。

             3、抽象类中可以有自己的数据成员,也可以有非abstarct的成员方法。

             4、抽象类和接口所反映出的设计理念不同。其实abstract class表示的是"is-a"关系

             5、抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

        接口

             1、接口是公开(public)的,里面不能有私有的方法或变量,是用于让别人使用的,

                实现接口的一定要实现接口里定义的所有方法。

             2、一个类却可以实现多个interface(java中实现多重继承的方法之一)。

                 而在接口中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,

             3、不过在 interface中一般不定义数据成员),而且所有的成员方法都是抽象的。

             4、interface表示的是"like-a"关系。(组合是"has a"关系)

             5、接口中定义的变量默认是public static final 型,且必须给其初值,

                所以实现类中不能重新定义,也不能改变其值。

  • 相关阅读:
    ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint......
    模拟Executor策略的实现
    设计3D标签
    创建被图像填充的组件
    netty基础09_利用EmbeddedChannel做单元测试
    netty基础08_引导类
    netty基础07_Netty提供的消息处理器和编码解码器
    netty基础06_编码器和解码器
    netty基础05_管道和消息处理器
    netty基础04_数据缓冲区
  • 原文地址:https://www.cnblogs.com/yueyazhishang/p/4020575.html
Copyright © 2020-2023  润新知