抽象类(abstract)
抽象类(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)相关推荐
- php 类 接口的区别吗,PHP的接口类(interface)和抽象类(abstract)的区别
/** * 接口类:interface * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类, * 那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候 ...
- php中的抽象类(abstract class)和接口(interface)
一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...
- Python编程基础:第四十七节 抽象类Abstract Classes
第四十七节 抽象类Abstract Classes 前言 实践 前言 抽象类可以这么理解,它就是一个模板,里面声明了子类必须定义的函数,但是对于每个函数都没有给出具体实现.所有函数的实现都是在子类中定 ...
- java 抽象接口类,Java接口(interface)和Java抽象类(abstract class)的区别(详诉版)
1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架, 当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...
- 小论接口(interface)和抽象类(abstract class)的区别
接口是类实现了某一种功能的体现,这种体现往往是对外的,所以重载接口的函数一定是public的 可是初学OO编程的时候,往往会碰到一个问题,既然有接口(interface)的存在,为什么还要有抽象类(a ...
- 接口Interface和抽象类abstract class的区别
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...
- Java 面向对象 之 抽象类 abstract
转载于 : http://www.verejava.com/?id=16992804621647 /**知识点: 抽象类 abstract题目: 爸爸叫我买一斤水果和一条鱼思路:1. 抽象出类:爸爸( ...
- C#中接口(Interface)与抽象类(abstract)的区别
前言:在我学习接口(interface)与抽象类(abstract)时,我发现它们有一些相似之处也有一些不同,本博文来详细说说它们二者之间的区别: 文章目录: 一.不同之处: 1.声明上: 2.成员上 ...
- Java中抽象类 abstract和interface的区别
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...
- java抽象类关键字_Java 抽象类 abstract关键字
抽象类前使用abstract关键字修饰,则该类为抽象类 抽象的方法是不完全的,它只是一个方法签名而完全没有方法体 抽象的方法没有花括号 继承抽象类的子类必须覆盖父类的抽象函数(即:子类继承抽象类以后, ...
最新文章
- MSSQL-最佳实践-行级别安全解决方案
- Simulink仿真---PMSM滞环电流控制仿真模型学习
- Linux的crontab任务调度
- java高并发(六)线程安全性
- 【漫画】程序猿 996 会猝死,而企业家 007 却不会?
- b700a怎么连蓝牙_小身材有大功能,小米蓝牙耳机AirDots青春版初体验
- Javascript使用技巧-提高工作效率
- Vitis下Linux应用程序开发流程
- Tampermonkey 油猴插件使用
- python函数定义以及调用
- “闽南金三角”——世丰管道福建漳州高级水电工程师会议
- 制作u盘winpe启动盘_老毛桃U盘启动盘制作
- 英语用法整理_用语库
- 阿里滑块 x82y x5sec本地dll 易语言
- java 数据库 事务 只读_Spring 事务 readOnly 到底是怎么回事?
- python中列表的平均值_Python中列表的平均值
- 若A、B为同阶矩阵且A、B均可逆,则AB亦可逆
- 完整 Python中切片说明 arr [start: end: step] (arr [-1]、arr[:-1]、arr [::-1] 等的区别)
- 《算竞(紫书)》笔记1 STL入门
- oracle全文索引之FILTER_2_INSO_FILTER
热门文章
- 【数据结构与算法】| Map和Set
- 【pyqt5学习】——添加菜单栏动作action,给动作触发triggered绑定事件
- WORD出现VBE6EXT.OLD不能被加载的问题
- C语言实战--DDOS攻击器
- SQL join关联三个表或多个表
- ASP微信头像保存到服务器,asp微信小程序获取用户头像和微信名-asp写的服务端...
- HDU 4415 Assassin’s Creed(贪心)
- 机器学习模型度量方法,分类及回归模型评估
- 首届中国城市轨道交通科技创新创业大赛清华站复赛成功举行
- 2022数维杯问题D:三重拉尼娜事件下极端气候灾害的损失评估和应对策略研究-思路分析