抽象类(abstract)接口 多态

抽象类概述
  • 抽象定义:

    • 抽象就是从多个事物中将共性的,本质的内容抽取出来。
    • 例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。
  • 抽象类:

    • Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。
  • 抽象方法的由来:

    • 多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取’了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。
    • 例如:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的犬科虽然有吼叫功能,但是并不明确吼叫的细节。
抽象类的特点
  • 抽象类和抽象方法必须用abstract关键字来修饰。

  • 抽象方法只有方法声明,没有方法体,定义在抽象类中。

    格式:修饰符 abstract 返回值类型 函数名(参数列表) ;
    
  • 抽象类不可以被实例化,也就是不可以用new创建对象。原因如下:

    • 抽象类是具体事物抽取出来的,本身是不具体的,没有对应的实

      例。例如:犬科是一个抽象的概念,真正存在的是狼和狗。

    • 而且抽象类即使创建了对象,调用抽象方法也没有意义。

  • 抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,否则该子类也是抽象类。

  • 有构造函数,专业做父类,可以包含抽象方法,可以有实现好的方法

  • 抽象类中可以没有一个抽象方法,可以理解为类的模板

  • 抽象方法必须实现

抽象类相关问题
  • 抽象类中是否有构造函数?(有)

  • 抽象关键字abstract不可以和哪些关键字

    共存?(final,抽象方法不能是private的)

  • 抽象类中可不可以没有抽象方法?

可以的。 但是很少见,目的就是不让该类创建对象。AWT的适配器对象就是这种类。通常这个类中的方法有方法体,但是却没有内容。
abstract class Demo{    void show1(){}  void show2(){}
}

抽象类和普通类比较,除了多了一个抽象方法之外和不能实例之外没有什么不同。

接口

​ 抽象类是一个模板

​ 接口是一个标准

当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用接口 interface来代替。

格式:interface{}
  • 接口中的成员修饰符是固定的(只能有这个两种元素)。

    • 成员常量:public static final
    • 成员函数:public abstract 这些关键字可以不写
  • 接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。

接口的特点
  • 接口是对外暴露的规则。
  • 接口是程序的功能扩展。
  • 接口可以用来多实现。
  • 类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
  • 接口与接口之间可以有多继承关系。类可以同时继承抽象类和接口
interface Usb
{//只能有常量,只能有抽象方法 ,其他都没有。//public final static double WIDTH = 1.0;    //public final static可以不写//public final static double HIGH = 0.5;double WIDTH = 1.0;double HIGH = 0.5;//public abstract void connect();  //public abstract可以不写void connect();
}
接口的实现:

​ 关键字:implements

  • 必须实现全部方法

    interface Eat{//定义一个接口void apple();void orange();
    }
    class Person implements Eat{//实现接口public void apple() {}public void orange(){}
    }
    

    多实现

    interface Eat{//定义一个接口void apple();
    }
    interface Sleep{
    }
    class Person implements Eat,Sleep{//实现接口public void apple() {}
    }
    

抽象类和接口的区别

区别点 抽象类 接口
定义 包含一个抽象方法的类 抽象方法和全局常量的集合
组成 构造方法、抽象方法、普通方法、常量、变量 常量、抽象方法
使用 子类继承抽象类(extends) 子类实现接口(implements)
关系 抽象类可以实现多个接口 接口不能继承抽象类,但允许继承多个接口
常见设计模式 模板设计 工厂设计、代理设计
对象 通过对象的多态性产生实例化对象
局限 抽象类有单继承的局限 接口没有局限
实际 作为一个模板 作为一个标准或表示一种能力
选择 如果抽象类和接口都可以使用,则优先使用接口,避免单继承的局限
特殊 一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类
多态

定义:某一类事物的多种存在形态。

  • 例:动物中猫,狗。

  • 猫这个对象对应的类型是猫类型

    • 猫 x = new 猫();

  • 同时猫也是动物中的一种,也可以把猫称为动物。

    • 动物 y = new 猫();

    • 动物是猫和狗具体事物中抽取出来的父类型。

    • 父类型引用指向了子类对象。

对象的向上转型
对象的向下转型(向下转型必须先要向上转型)
Animal a = new Dog();
Dog d = (Dog)a;
一旦向上转型了,只能访问父类和子类共有的方法。
  • 多态体现:

    • 父类或者接口的引用指向或者接收自己的子类对象。
  • 作用:

    • 多态的存在提高了程序的扩展性和后期可维护性
  • 前提:

    • 需要存在继承或者实现关系
    • 要有覆盖操作
多态的特点
  • 成员函数:

    • 编译时:要查看引用变量所属的类中是否有所 调用的成员。
    • 在运行时:要查看对象所属的类中是否有所调用的成员。
  • 成员变量:

    • 只看引用变量所属的类。
System.out.println(dog instanceof Dog);
System.out.println(dog instanceof Animal);
在多态中进行向下转型最好是先用instanceof判断下类型
设计类的注意事项
  • 类的设计主要是父类的设计
  • 子类最好不要去 继承一个已经完全实现好了的类,因为一旦发生向上转型,所调用的方法一定是被子类覆盖过的方法,所以只会继承抽象类或者是接口。

抽象类(abstract)相关推荐

  1. php 类 接口的区别吗,PHP的接口类(interface)和抽象类(abstract)的区别

    /** * 接口类:interface * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类, * 那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候 ...

  2. php中的抽象类(abstract class)和接口(interface)

    一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...

  3. Python编程基础:第四十七节 抽象类Abstract Classes

    第四十七节 抽象类Abstract Classes 前言 实践 前言 抽象类可以这么理解,它就是一个模板,里面声明了子类必须定义的函数,但是对于每个函数都没有给出具体实现.所有函数的实现都是在子类中定 ...

  4. java 抽象接口类,Java接口(interface)和Java抽象类(abstract class)的区别(详诉版)

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架, 当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

  5. 小论接口(interface)和抽象类(abstract class)的区别

    接口是类实现了某一种功能的体现,这种体现往往是对外的,所以重载接口的函数一定是public的 可是初学OO编程的时候,往往会碰到一个问题,既然有接口(interface)的存在,为什么还要有抽象类(a ...

  6. 接口Interface和抽象类abstract class的区别

    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...

  7. Java 面向对象 之 抽象类 abstract

    转载于 : http://www.verejava.com/?id=16992804621647 /**知识点: 抽象类 abstract题目: 爸爸叫我买一斤水果和一条鱼思路:1. 抽象出类:爸爸( ...

  8. C#中接口(Interface)与抽象类(abstract)的区别

    前言:在我学习接口(interface)与抽象类(abstract)时,我发现它们有一些相似之处也有一些不同,本博文来详细说说它们二者之间的区别: 文章目录: 一.不同之处: 1.声明上: 2.成员上 ...

  9. Java中抽象类 abstract和interface的区别

    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...

  10. java抽象类关键字_Java 抽象类 abstract关键字

    抽象类前使用abstract关键字修饰,则该类为抽象类 抽象的方法是不完全的,它只是一个方法签名而完全没有方法体 抽象的方法没有花括号 继承抽象类的子类必须覆盖父类的抽象函数(即:子类继承抽象类以后, ...

最新文章

  1. MSSQL-最佳实践-行级别安全解决方案
  2. Simulink仿真---PMSM滞环电流控制仿真模型学习
  3. Linux的crontab任务调度
  4. java高并发(六)线程安全性
  5. 【漫画】程序猿 996 会猝死,而企业家 007 却不会?
  6. b700a怎么连蓝牙_小身材有大功能,小米蓝牙耳机AirDots青春版初体验
  7. Javascript使用技巧-提高工作效率
  8. Vitis下Linux应用程序开发流程
  9. Tampermonkey 油猴插件使用
  10. python函数定义以及调用
  11. “闽南金三角”——世丰管道福建漳州高级水电工程师会议
  12. 制作u盘winpe启动盘_老毛桃U盘启动盘制作
  13. 英语用法整理_用语库
  14. 阿里滑块 x82y x5sec本地dll 易语言
  15. java 数据库 事务 只读_Spring 事务 readOnly 到底是怎么回事?
  16. python中列表的平均值_Python中列表的平均值
  17. 若A、B为同阶矩阵且A、B均可逆,则AB亦可逆
  18. 完整 Python中切片说明 arr [start: end: step] (arr [-1]、arr[:-1]、arr [::-1] 等的区别)
  19. 《算竞(紫书)》笔记1 STL入门
  20. oracle全文索引之FILTER_2_INSO_FILTER

热门文章

  1. 【数据结构与算法】| Map和Set
  2. 【pyqt5学习】——添加菜单栏动作action,给动作触发triggered绑定事件
  3. WORD出现VBE6EXT.OLD不能被加载的问题
  4. C语言实战--DDOS攻击器
  5. SQL join关联三个表或多个表
  6. ASP微信头像保存到服务器,asp微信小程序获取用户头像和微信名-asp写的服务端...
  7. HDU 4415 Assassin’s Creed(贪心)
  8. 机器学习模型度量方法,分类及回归模型评估
  9. 首届中国城市轨道交通科技创新创业大赛清华站复赛成功举行
  10. 2022数维杯问题D:三重拉尼娜事件下极端气候灾害的损失评估和应对策略研究-思路分析