JAVA基础知识|抽象类与接口类
一、抽象类
抽象类:拥有抽象方法的类就是抽象类,抽象类要使用abstract声明
抽象方法:没有方法体的方法,必须要使用abstract修饰
为什么要使用抽象类,抽象方法?
举例来说,如果你定义了一个类Person,此类中包含很多公共属性和方法。但是其中有一个方法,每个子类实现的方式都不同。比如“吃饭”这个方法,Child类中,“吃饭”使用勺子”,Adult类中,“吃饭”使用筷子。那么我们就在Person类中把这个方法定义好,就毫无意义。
public abstract class Person {
//身高
public double height;
//体重
public double weight;
//年龄
public int age;
//名字
public String name;
//跑步
public void run() {
System.out.println("==跑步==");
}
//吃饭
public abstract void eat();
}
public class Child extends Person {
//构造函数
public Child(String name, double height, double weight, int age) {
this.height = height;
this.weight = weight;
this.name = name;
this.age = age;
}
//无参构造函数
public Child() {
}
//吃饭
@Override
public void eat() {
System.out.println("==用勺子吃饭==");
}
}
public class Adult extends Person {
//构造函数
public Adult(String name, double height, double weight, int age) {
this.height = height;
this.weight = weight;
this.name = name;
this.age = age;
}
//无参构造函数
public Adult() {
}
//吃饭
@Override
public void eat() {
System.out.println("==用筷子吃饭==");
}
}
抽象类与普通类的区别?
1)抽象类中的抽象方法必须声明为public或protected类型,如果声明为private或者friendly类型,子类不能继承使用,没有意义
2)抽象类不能创建对象,Person person = new Person();
3)如果子类继承了抽象类,则必须实现抽象类中的抽象方法。如果不实现,则必须将子类也声明为抽象类
二、接口
接口:在Java编程语言中是一个抽象类型,是抽象方法的集合
接口并不是类,虽然写法很相似。类描述对象的属性和方法,接口则包含类要实现的方法
接口表现的是一种能力,如果类实现了接口,表明这个类也具备了接口所要表现的能力
接口特性:
1)接口中的所有方法都是抽象方法,默认修饰符是public abstract(也只能是public abstract)
2)接口中也有变量,默认修饰符是public static final(也只能是public)
3)接口可以继承接口,而且可以多继承
三、抽象类与接口区别
语法区别:
1)抽象类中可以有非抽象方法,接口中的方法必须都是抽象方法
2)抽象类中的变量可以是各种类型的,接口中的变量只能是public static final类型的
3)抽象类中可以有静态代码块和静态方法,接口中不可以
4)一个类只可以继承一个抽象类,但是可以实现多个接口
设计区别:
抽象类是对一种事物的抽象,即对类抽象。而接口是对行为的抽象。
抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。
从这里可以看出,继承是一个 “是不是”的关系,而接口实现则是 “有没有”的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。
JAVA基础知识|抽象类与接口类的更多相关文章
- Java基础之抽象类与接口
Java基础之抽象类与接口 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候 ...
- java基础(四)-----抽象类与接口
抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们 ...
- 程序猿的日常——Java基础之抽象类与接口、枚举、泛型
再次回顾这些基础内容,发现自己理解的又多了一点.对于一些之前很模糊的概念,渐渐的清晰起来. 抽象类与接口 抽象类通常是描述一些对象的通用方法和属性,并且默认实现一些功能,它不能被实例化.接口仅仅是描述 ...
- java基础之抽象类与接口的区别
在学习java的过程中,或者是在找工作笔试或面试的时候,如果你是java岗位,那么抽象类与接口的区别无疑是一个大热点,是各大公司都想要考的一个小知识点,下面是我为了9月份秋招自己总结的,若有不对的地方 ...
- java基础之抽象类与接口的形式参数和返回值
抽象类与接口形式参数和返回值问题 1.形参问题 /* 1.形式参数: 基本类型(太简单,不是我今天要讲解的) 引用类型 (1)类名:(匿名对象的时候其实我们已经讲过了) 需要的是该类的对象 (2)抽象 ...
- 3、java基础:抽象类与接口的区别
抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样 ...
- Java基础之抽象类和接口
今天来说说抽象类和接口的实现以及它们的区别.我们知道抽象类和接口都是对具体事物的抽象,接口在实现上比抽象类更加抽象,抽象类中可以有普通方法和变量,而接口中只有抽象方法和不可变常量.但是从另一个角度看, ...
- java基础之抽象类和接口的区别
抽象类和接口的区别 A:成员区别 抽象类: 成员变量:可以是变量,也可以是常量 构造方法:有 成员方法:可以是抽象方法,也可以是非抽象方法 接口: 成员变量:只能是静态常量(不写修饰符,默认是 sta ...
- java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter
FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFi ...
随机推荐
- MVC,MVP 和 MVVM 的图示(原理)
一.MVC MVC模式的意思是,软件可以分成三个部分. 视图(View):用户界面. 控制器(Controller):业务逻辑 模型(Model):数据保存 各部分之间的通信方式如下. View 传送 ...
- docker-社区版(CE)安装
目录 docker-社区版(CE)安装 安装步骤 docker-社区版(CE)安装 该安装方法是 基于centeros7 及其以上版本的安装方式,完全参考 docker官网提供的安装文档,官网安装文档 ...
- iframe内嵌页面——跨域通讯
<template> <div class="act-form"> <iframe :src="src" ref=" ...
- 【Linux】Linux基本命令
一.Linux关机 shutdown -h 10 10min后关机 shutdown -h 10:00 10:00关机 shutdown -h now 或 halt 或 poweroff 立即关机 ...
- Endless looping of packets in TCP/IP networks (Routing Loops)
How endless looping of packets in a TCP/IP network might occur? Router is a device used to interconn ...
- 微信小程序开发(十三)安卓手机调用wx.getConnectedWifi API失败
安卓手机调用wx.getConnectedWifi API失败,返回的错误码是12000.需要先startWifi 接口: wx.startWifi({ success(res) { console. ...
- Insufficient space for shared memory file 解决办法
Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file: /tmp/hsperfd ...
- Juit
Junit这种老技术,现在又拿出来说,不为别的,某种程度上来说,更是为了要说明它在项目中的重要性. 凭本人的感觉和经验来说,在项目中完全按标准都写Junit用例覆盖大部分业务代码的,应该不会超过一半. ...
- 单元测试框架之unittest(五)
一.摘要 单元测试里很重要的一个部分就是断言,unittest为我们提供了很多断言方法,断言方法分为三类,一种是用来断言被测试的方法的,另一种是测试是否抛正确异常的,第三种是用来断言日志是否包含应有信 ...
- 0003SpringBoot整合SpringDataJPA
SpringBoot整合SpringDataJpa步骤如下: 1.添加data-jpa起步依赖(pom.xml) 2.添加数据库驱动坐标.添加Junit起步依赖(pom.xml) 3.添加数据库连接信 ...