第十八节(详解Java抽象类和接口的区别)
文章图片
标题图 前言
【第十八节(详解Java抽象类和接口的区别)】对于面向对象编程来说,抽象是它的特征之一。
在Java中,实现抽象的机制分两种,一为抽象类
,二为接口
。
抽象类为abstract class
,接口为Interface
。
今天来学习一下Java中的抽象类和接口。
目录
- 什么是抽象
- 什么是抽象类
- 什么是接口
- 区别
- 代码例子
- 结语
举例,红色这个词语本身,在没有建立存在色彩这种概念以前,就是一个很抽象的东西。抽象说直白点就是把现实生活中复杂的问题抽象成一个简单的问题。举个例子,如人这个现实中的东西,抽象下就是
person
这个对象,对象有名字即类名,接着有属性即年龄,性别,身高等。对于对象中的方法即是人要吃饭,睡觉等。什么是抽象类 抽象类的定义和使用格式
abstract class 类名{
类体
}
class 类名 extends 抽象类 {
//实现全部抽象方法
}
抽象类是
类对象的抽象集合
,抽象类使用abstract
关键字修饰,abstract
不能与final
并列修饰同一个类,在抽象类中具体抽象的是属性和行为,在抽象类中,含有抽象方法的类为抽象类,一定是抽象类,但抽象类中不一定含有抽象方法。抽象类不能被实例化,如果要实例化,需通过子类继承抽象类,然后子类必须重写父类的所有抽象方法。抽象方法在抽象类,仅此声明,方法的具体实现在子类中进行。抽象类只有被继承才有用武之地。
//抽象类
public abstract class Person {
public abstract void run();
}//子类继承抽象类
public class Studentone extends Person{
@Override
public void run(){
System.out.println("人会跑");
}
}//测试
public class Test {
public static void main(String[] args){
Person person = new Student();
person.run();
}
}//结果
人会跑
什么是接口 接口的定义和使用格式
interface 接口名 {
[public] [static] [final] 变量;
[public] [abstract] 方法;
}
class 类名 implement 接口列表 {
//实现所有接口中声明的方法
}
接口是
类行为方法的抽象集合
,类行为方法,是对方法进行抽象,接口不是一个类,对于抽象类,它是对对象的抽象集合
,对象即包含对属性和方法,接口是比抽象类更加抽象的一种。Java
中的接口是为了降低功能模块间的耦合,子接口中所有方法都是抽象的,都是公有的。接口中的属性是全局常理即为public static final
的,方法即public static
的。关键字implements
实现接口,Java
中不能继承多个抽象类,但能实现多个接口,记住接口只能继承接口。interface Demo{
void sleep();
void play();
}class Test implements Demo{
void sleep();
void play();
}
类必须实现接口中所有的方法,但抽象类可以不用实现接口中的所有方法。区别 抽象类和接口语法层次
public abstract class Demo {
abstract void method1();
void method2(){
}
}
interface Demo {
void method1();
void method2();
}
可以看出接口是抽象类的特殊化。
抽象类和接口设计层次
- 抽象类是
对类抽象
,而接口是对行为的抽象
。 - 抽象类为
继承关系
,接口为实现类与接口之间的契约关系
。 - 抽象类为单继承,接口为多“继承”。子类只能继承一个抽象类,但可实现多个接口。
//抽象类
abstract class Person {
abstract void run();
abstract void jump();
}//接口
interface School{
void go();
}//实现
class Student extends Person implements School{
void run();
void jump();
void go();
}
抽象类中成员变量默认为friendly,函数修饰符结语public
,protected
,default
。
接口属性为静态,public static final
,成员函数为public
。
- 详解
Java
抽象类和接口的区别
文章图片
送?
推荐阅读
- Java|Java OpenCV图像处理之SIFT角点检测详解
- C语言浮点函数中的modf和fmod详解
- 亲子日记第十二天
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- 第十九周
- 欢乐小分队内蒙东北行第六站(第十二天)五大连池印象之(奇特壮观的火山地貌景观)
- 未来丛林历险记
- 第十一节课打卡|第十一节课打卡 杨小风
- 第十六天(请介绍一件让你非常自豪的事情,(不能是职业类的),什么原因感到自豪。)