• 18. 抽象类


    1.抽象分析

      需求:定义一个狗类和鸟类,并且具备叫的方法,例如 汪汪  叽叽喳喳

     

      方案:定义一个父类(基类)Animal,并且有动物的名字和叫法。

      再定义2个子类继承父类

     

      苦恼:动物一般都有叫的行为,但是叫法又不同,那我在父类如何定义叫的成员函数呢?

     

      解决1:不写叫的行为(成员函数),但是如果不写是不是可以认为动物没有叫的能力呢?

      违背我们类的定义,否定方案。

     

      解决2:定义行为,但不写具体的实现------抽象方法。

     

      例如:

        abstract class Animal {

          //定义抽象方法

          abstract void shout();

        }

     

      解决2可行的原因分析:

      1. 没有违背类的定义标准,动物都有叫的行为。
      2. 因为父类没写具体的实现,所以子类有更多的可变性。

      例如:

        class Dog extends Animal {

          void shout() {

          System.out.println("旺旺");

          }

        }

    2. 使用abstract

     

      1)定义:

        当描述一个类的时候,如果不能确定功能函数如何定义,那么该类就可以定义为抽象类,功能函数应该描述为抽象函数。

     

      2)语法:

        abstract public void shout();

     

    3. 定义抽象方法时注意事项:

     

      1)抽象类中不一定要有抽象函数,但有抽象方法的类,一定时抽象类。

     

      2)抽象类不能使用new创建对象

     

        原因:创建对象是因为我们要调用类里面的方法,但是抽象方法没有具体的实现,不能调用。

     

      3)如果子类继承的父类是抽象类,那么子类要实现父类的全部抽象方法

     

        注意:可以不实现,前提是子类的也要声明为抽象的。

        

      4)final与abstract不能共存:

     

        final:它的作用  修饰类代表不可以继承  修饰方法不可重写

        abstract修饰类就是用来被继承的,修饰方法就是用来被重写的。

     

      5)static 修饰的方法可以用类名调用,

     

        对于abstract修饰的方法没有具体的方法实现,所有不能直接调用,也就是说不可以与static共存。

     

      6)private

        private修饰的只能在本类中使用,

        abstract方法是用来被子类进行重写的,有矛盾所有不能共存.

     

      7)抽象方法一定有构造方法

     

        因为要初始化成员变量

    4.抽象方法优点

      1)提高代码复用性

      2)强制子类实现父类中没有实现的功能

      3)提高代码的扩展性,便于后期的代码维护

  • 相关阅读:
    rails 给类添加属性
    workflow engine Ruote初体验之二(通用属性)
    workflow engine Ruote初体验之一(概念)
    workflow engine Ruote 安装
    文字编码
    C# 制作Windows服务安装包
    Ruby on rails初体验(三)
    18-语言入门-18-鸡兔同笼
    17-语言入门-17-笨小熊
    16-语言入门-16-谁获得了最高奖学金
  • 原文地址:https://www.cnblogs.com/zjdbk/p/8877743.html
Copyright © 2020-2023  润新知