Java面向对象程序设计:抽象类,接口用法实例分析
作者:随风行云 发布时间:2023-03-08 23:56:07
本文实例讲述了Java面向对象程序设计:抽象类,接口用法。分享给大家供大家参考,具体如下:
本文内容:
抽象类
接口
抽象类与接口的异同
首发日期:2018-03-24
抽象类:
虽然已经有了父类,但有时候父类也是无法直接描述某些共有属性的,比如哺乳类和人类都会叫,而一般来说哺乳类这个父类并没有准确定义“叫”的属性的,显然应该由子类来决定怎么“叫”,但“叫”这个属性是共有的,那么可以把这个属性抽象化(抽象则代表没有具体内容),由子类来实现具体内容。
普通类中无法定义抽象方法,所以定义了抽象类。
由于抽象方法子类是必须重写的,不然会运行失败,所以可以确保子类重写抽象方法。
抽象类可以有抽象方法,也可以没有抽象方法(没有抽象方法的抽象类),没有抽象方法时,子类继承不需要覆盖方法。
抽象类不可以实例化,不能用new关键字创建对象。
只有子类覆盖所有的抽象方法后,子类具体化,子类就可以创建对象。如果没有覆盖所有的抽象方法,子类还是抽象类。
抽象方法一定定义在抽象类中,都需要abstract来修饰。抽象方法只允许声明,不允许定义。故此不能有大括号。抽象方法也不允许用final修饰。
抽象类的定义格式:
抽象方法的定义格式:
abstract class A{
abstract void talk();//只能声明,不能具体定义
}
class B extends A{
void talk() {
System.out.println("run in B");//子类必须重写抽象方法
}
}
public class Demo {
public static void main(String[] args) {
B b=new B();
b.talk();
}
}
接口:
接口也是抽象的,抽象的原因与抽象类的原因类似。但用处不同,接口一般用于定义类的统一行为,而抽象类是“继承”。
类重写一个接口中的所有抽象方法称为接口的实现。
接口解决的问题:JAVA不直接支持多继承,但支持多实现。
接口体中包含常量定义和方法声明,不允许对方法进行定义。
接口可以说是完全抽象的抽象类。
子类需要覆盖接口中的所有的抽象方法才能实例化,否则它是一个抽象类。
如果一个类实现了一个接口,该类必须对接口中声明的方法进行定义。实现方法时方法的名字、返回类型、参数个数及参数类型必须与接口声明的一致。
接口中,方法的修饰符默认是public abstract;接口中的常量的修饰符默认是public static final;所以子类中必须使用public来修饰定义的方法。
接口的定义格式:
接口的实现:
package 接口;
interface A{
public static final int size=100;
public abstract void talk();
// public abstract void eat();
}
class B implements A{
//实现A中的抽象方法
public void talk() {
System.out.println("B talk");
}
}
public class Demo {
public static void main(String[] args) {
new B().talk();
}
}
注意:
如果一个类声明实现了一个接口,但没有实现接口的所有方法,那么这个类必须是抽象类
如果一个类没有完全实现接口中的所有方法,那么这个类必须是一个抽象类。
抽象类与接口的异同:
相同:
都是抽象的
都不能被实例化
都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,但是不提供具体的实现。
差异:
接口是完全抽象
概念设计区别:
抽象类是可以有非抽象方法的,而接口是完全抽象的,其实可以这样理解他们的区别:A,B都是一个抽象类,但它们由于是“父类”,所以一般来说都是有一些具体属性的,可以说抽象类是一个父类的抽象化,但它离不开父类与子类的关系;但接口定义的是行为,它并没有强的父子类关系,它只是完全抽象的定义了一些行为作为标准,就像工厂里的元件的各种标准。
而接口中的变量和方法的修饰符都显示出接口是一个“开放的固定的行为标准”
希望本文所述对大家java程序设计有所帮助。
来源:https://www.cnblogs.com/progor/p/8636061.html
猜你喜欢
- ComparableComparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Compa
- 业务场景近年来B2C、O2O等商业概念的提出和移动端的发展,使得分布式系统流行了起来。分布式系统相对于单系统,解决了流量大、系统高可用和高容
- java数组初始化赋初值方法一int[] vis1;//声明未初始化 vis1=new in
- 本文实例为大家分享了Java实现发送邮件并携带附件的具体代码,供大家参考,具体内容如下一、 邮件服务器与传输协议要在网络上实现邮件功能,必须
- Java停止线程的逻辑(协同、通知)在Java程序中,我们想要停止一个线程可以通过interrupt方法进行停止。但是当我们调用interr
- 1 redis主从复制的概念多机环境下,一个redis服务接收写命令,当自身数据与状态发生变化,将其复制到一个或多个redis。这种模式称为
- 大家在登录网站的时候,大部分时候是通过一个表单提交登录信息。但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用HTTP基本认证。
- 分析Github 3000个开源项目,粗略统计如下。括号内的数字是使用频率 0-3000. 下面的列表显示不全,完整的请看完整列表。1.ja
- 一般都在windows下开发的,现在部署到linux下:1,将项目达成war包(用eclipse,项目右键-->Export-->
- 前言在上篇文章《初识GraphQL》中我们大致的了解了GraphQL作用,并通过简单示例初步体验了GraphQL的使用。下面我们从Hello
- 本文实例讲述了java GUI编程之paint绘制操作。分享给大家供大家参考,具体如下:import java.awt.*;public c
- 要求:1、输入手机号,点击发送后随机生成6位数字码,2分钟有效2、输入验证码,点击验证,返回成功或失败3、每个手机号每天只能输入3次代码如下
- 虽然说模块通信、路由协议在Android已经不新鲜了,但是如果脱离了那些优秀的开源库我们从零开始自己造一个库,有时候重复造轮子会让自己对所谓
- Servlet:在Servlet中拼接html内容JSP:在html中拼接javaJSP+JavaBean:利用javaBean将大量的代码
- 背景公司的一个服务需要做类似于分片的逻辑,一开始服务基于传统部署方式通过本地配置文件配置的方式就可以指定该机器服务的分片内容如:0,1,2,
- 什么是EurekaNetflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能。Spr
- 新建一个类MyPageInterceptor.java(注意在springboot中要添加注解@Component)package com.
- 在项目中,时常会有异步调用的需求web.xml配置<servlet> <description>spri
- 一、java异常总结:异常就是程序运行时出现不正常运行情况1.异常由来:通过java的类的形式对现实事物中问题的描述,并封住成了对象其实就是
- 增加了用于处理MyBatis的两个bean:SqlSessionFactoryBean、MapperFactoryBean1、注册SqlSe