抽象类与接口
来源:互联网 发布:mysql loadfile 锁 编辑:程序博客网 时间:2024/06/14 20:54
抽象类的关键字:abstract
类定义前面如果再加上一个abstract,就代表该类为抽象类。抽象类里面只包含一些最基本的最通用的成员。
抽象类里面可以有抽象方法,但没有抽象方法的话也可以将它定义成抽象类,从而防止它被实例化。对于抽象类的使用可以看以下代码:
class Demo{ public static void main(String[] args){ Teacher teacher = new Teacher(); teacher.SetName("张三"); teacher.show(); Student stu = new Student(); stu.SetName("小明"); stu.show(); }}/** *定义一个抽象类 */abstract class People { String name; void SetName(String name){ this.name = name; } abstract void show();//抽象方法}/** *继承抽象类 */class Teacher extends People{ void show() { //抽象方法必须被实例化 System.out.println("我是Teacher类,我的名字是:"+name); }}/** *继承抽象类 */class Student extends People{ void show(){ //抽象方法必须被实例化 System.out.println("我是Student类,我的名字是:"+name); }}运行结果:我是Teacher类,我的名字是:张三我是Student类,我的名字是:小明
抽象类是不能够被实例化的,必须要有子类来继承它,实现里面的抽象方法,然后使用子类的实例。
不过也可以定义一个抽象类的变量,让它指向子类的实例。如下:
People people = new Teacher(); people.SetName("李四"); people.show(); 运行结果: 我是Teacher类,我的名字是:李四
这样也是多态性的一种体现。
注意:抽象方法不能使静态的,因为静态方法在类加载的时候会存在。
抽象类的构造方法不能为抽象的,因为实例化子类的时候会先执行父类的构造方法的。
定义接口的关键字:interface
实现接口的关键字:implements
接口可以看成一种特殊的抽象类,它比抽象类更加抽象。它里面的方法都必须是抽象方法,里面的所有成员变量都必须是常量,也就是public static final的。
接口可以看成是一种规定,它规定了一个类必须做什么,而不会规定它怎么做。我们还是看一下的代码:
public class MyInterface { public static void main(String[] args) { Refrigerator ref= new Refrigerator(); ref.model(); ref.size(); }}/** * 定义一个家电的接口 */ interface Appliance{ void model();//定义家电型号的抽象方法 } interface Display{ void size();//定义大小的抽象方法 } class Refrigerator implements Appliance,Display{ /** * 必须将抽象的方法实现 */ public void model() { System.out.println("这就是我的型号"); } public void size() { System.out.println("这就是我的大小"); } }输出结果:这就是我的型号这就是我的大小
接口可以看成是常量和若干接口方法的组合,从上面的程序可以看出,一个类是可以实现多个接口的,这和类的单继承性是不同的。
接口和抽象类的区别
1、从某种角度上看,接口也是一种特殊的抽象类,它们都包含有抽象方法,但抽象类可以为部分方法提供实现,而接口里面的所有方法都是抽象的,因此我们如果需要为部分方法提供实现的话就可以使用接口。
2、一个类只能继承一个父类(包括抽象类),但可以实现多个接口,这个是接口的优势之一。
0 0
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 接口与抽象类
- 接口与抽象类
- Raspberry Pi: INSTALLING OPERATING SYSTEM IMAGES ON MAC OS
- 第十一周 项目二 储存班长信息的学生类
- 2015-第10周项目1-项目1 - 存储班长信息的学生类
- 第十一周阅读程序2:继承与派生
- 2015年第十一周项目三:点类派生直线类
- 抽象类与接口
- 代理模式
- HttpClient判断网络是否连接
- 第五届ACM/ICPC程序设计竞赛——大家来找茬
- YTUOJ-爱你多少年呢
- 使用STM32CubeMX开发一:跑马灯实验
- 欢迎使用CSDN-markdown编辑器
- java位运算(转)
- 第十一周上机项目3职员有薪水了