zoukankan      html  css  js  c++  java
  • 抽象&接口

     

    抽象类的特点:
      <1> 抽象方法一定在抽象类中
      <2> 抽象方法和抽象类都必须被abstract关键字修饰
      <3> 抽象类不可以用new创建对象,因为调用抽象方法没意义
      <4> 抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用; 如果子类只覆盖了部分的抽象方法,那么该子类还是一个抽象类。
      <5> 抽象类中可以有抽象方法也可以有非抽象方法
      <6> 抽象类和一般类没有太大的不同:   该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂得东西。这些不确定的部分,也是该事物的功能,需要明确出现。但是无法定义主体
      <7> 抽象类比一般类多了个抽象函数,就是在类中可以定义抽象方法; 抽象类不可以实例化。
      特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让改类建立对象。

    抽象类的成员特点:
      1:成员变量:子类可以直接继承抽象类中的成员变量。(抽象类中的成员变量可以和以前是一样的)
      2:成员方法:抽象类中分为两种方法,一种是抽象方法,这种方法在子类中必须要被实现。一种是普通的方法。可以被子类直接继承使用。
      3:构造方法:抽象类不能被实例化,那么它有构造方法吗?抽象类是class,那么它就有构造方法。它的构造方法有用吗?有,为了让子类实例化的时候使用。
      模板方法:
        在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去。有该类的子类去实现。

    抽象关键字abstract不可以和哪些关键字共存?

    private
    私有的,外部直接无法访问。
    static
    那么这个时候抽象方法就可以可以通过类名调用,但是这样是没有意义的。
    final
    final修饰的方法不能被重写。所以它和abstract冲突。


      
    接口(interface)

    接口的由来:当一个类中所有的方法都是抽象的时候,你没必要定义为抽象类,定义为接口就可以了。

    接口与类属于同一层次,实际上,接口是一种特殊的抽象类。

    一个类实现接口,相当于它继承一个抽象类
      

    接口解决了java中只能单继承的问题。(对多继承进行了优化)
      1:类与类:只能是单继承。 extends
      2:接口与接口:可以是单继承,也可以是多继承。 extends
      3:类与接口:可以是单实现,也可以是多实现。 implements
     (3)成员特点:
      1:只有成员变量和成员方法。
      2:成员变量 默认修饰符 public static final
       int X = 20;
       其实是这样的 public static final int X = 20;
      3:成员方法 默认修饰符 public abstract
      void show();
      其实是这样的 public abstract void show();

    接口和抽象类的区别:
      1:抽象类只能被单继承;接口可以被多实现。
      2:抽象类中的成员:成员变量:可以是常量,也可以是变量。
           成员方法:可以是抽象的,也可以是非抽象的。
           构造方法:虽然不可以创建对象,但是可以给子类实例化用。
         接口中的成员:成员变量:只能是常量。默认修饰符 public static final
         成员方法:只能是抽象的。默认修饰符 public abstract
      3:抽象类中定义的是体系结构中的共性的内容。
         接口中定义的是对象的扩展功能。
      4:抽象类被继承表示的是:"is a"的关系。xx是yy中的一种。
         接口被实现表示的是: "like a"的关系。xx像yy中的一种。

     

     

    总结:

    如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。

    abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。

    abstract虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。

    final和abstract永远不会同时出现。

    如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须为抽象类,这与此类为非抽象冲突,所以报错。

    所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。

    抽象是所有对象的共性功能而接口是对象的扩展功能

     

                 

     

     

  • 相关阅读:
    getfacl语法2
    getfacl
    setfacl语法2
    setfacl语法
    特殊权限语法2
    特殊权限语法
    vim语法
    locate语法
    find语法
    dos语法
  • 原文地址:https://www.cnblogs.com/sooper/p/3407287.html
Copyright © 2011-2022 走看看