Java基础之抽象类和接口

抽象类和接口

抽象类

什么是抽象类

要解释抽象类,首先解释一下什么是抽象方法

抽象方法:方法必须使用关键字abstract修饰,有声明,没有方法体(注意在编码的时候,不能丢掉“;”。{}的含义是方法体为空,没有方法体就代表没有{}结构)

那么现在解释一下什么是抽象类

抽象类:

从外形上看,必须使用abstract关键字修饰

从其内容来看,如果一个类中,包含了抽象方法,那么这个类一定为抽象类。但是,在抽象类中,也可以包含具体的类,也就是说,在一个抽象类内部,可能连一个抽象函数都没有,全部都是具体的方法。

 

抽象类的使用原则如下

(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public; 
(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理; 
(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类; 
(4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);

(5)抽象类里会存在一些属性,那么抽象类中一定存在构造方法,其存在目的是为了属性的初始化。 
并且子类对象实例化的时候,依然满足先执行父类构造,再执行子类构造的顺序。

(6)抽象类不可以用final声明, 因为抽象类必须有子类,而final定义的类不能有子类;

(7)可以直接调用抽象类中用static声明的方法, 因为任何时候,如果要执行类中的static方法的时候,都可以在没有对象的情况下直接调用,对于抽象类也一样。 

抽象类的作用:捕捉子类的通用特性

 

接口

什么是接口(Interface)

 

1.直观上看,由interface修饰的类,就是一个接口,其声明方式为

   public interface A{……}

2.特征上来看,接口是一种特殊的抽象类,其中包含抽象方法和全局常量,连构造方法也没有:

其成员变量,默认由public static final修饰的(可省略),且必须显式初始化,所以均为常量,最好使用大写方式表示(名称过长使用“_”分隔);

其成员方法,默认由public abstract修饰的(可省略),且不能有方法体,只是一种声明。

interface A{
	int var;//错,必须显式初始化
	int COUNT = 1;//合法,默认为public static final的
	public static final int CON = 2;//合法,显式声明为public static final的
	public abstract void testfun();//合法,显式声明为public abstract
	void testfun01();//合法,默认为public abstract的
	protected void testfun02();//错,接口中的方法的修饰符只能存在public、abstract、 default、 static	
	void testfun03() {};//错,接口中只能有抽象方法,不能有方法体
	static void testfun04() {}//合法,由static修饰的方法,必须有方法体	
}

 

接口是用来干什么的

接口是一种规范,接口定义了多个对象的共同行为,实现接口的对象可以分别实现自己的方法体。

如何使用接口:

1.接口是不能被实例化的,所以必须有子类来实现接口,关键字为implements,子类可以同时实现多个接口,间接地实现了多继承;

2.如果实现接口的子类不是抽象类,那么子类中必须重写接口中所有的抽象方法;

3.虽然,接口不能使用new的方式进行实例化,但是可以定义接口类型的引用变量,并且使用子类对象的向上类型转换进行实例化。

public class interface01 implements A,B{
    //子类重写了接口的所有抽象方法
	@Override
	public void testfun() {
		System.out.println("接口A");
		
	}
	
	@Override
	public void testfun01() {
		System.out.println("接口B");
	}
	
	public static void main(String[] args) {
		interface01 i1 = new interface01();
		//定义接口类型的引用
		A a = i1;
		B b = i1;
		a.testfun();
		b.testfun01();
	}
	
}
interface A{
	public abstract void testfun();//合法,显式声明为public abstract
}

interface B{
	void testfun01();
}

 

4.一个接口不能实现其他接口,但是可以继承其他多个接口

interface C extends A,B{
	
}

5.instanceof 

接口使用instanceof关键字,判断一个对象是否实现了某接口。

 

6.接口的好处

(1)接口反映了对象以及对对象操作的本质。

(2)代码复用,同一套代码可以处理多种不同类型的对象,只要这些对象都有相同的能力。

(3)降低了耦合,提高了灵活性。使用接口的代码依赖的是接口本身,而非实现接口的具体类型,程序可以根据情况替换接口的实现,而不影响接口使用者。

 

抽象类VS接口

1.接口只能包含抽象方法,抽象类可以包含普通方法。 
2 接口只能定义静态常量属性,并且显式初始化;抽象类既可以定义普通属性,也可以定义静态常量属性。 
3 接口不包含构造方法,抽象类里可以包含构造方法。

抽象类不能被实例化,但不代表它不可以有构造函数,抽象类可以有构造函数,备继承类扩充

4 抽象类是一个特殊的类,但是接口与类是不同的类型    

5 接口是核心,其定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做。 
如果许多类实现了某个接口,那么每个都要用代码实现那些方法 
如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法则由各个子类去实现。

抽象类是为了简化接口的实现,他不仅提供了公共方法的实现,让你可以快速开发,又允许你的类完全可以自己实现所有的方法,不会出现紧耦合的问题。

应用场合很简单了 
1 优先定义接口 
2 如果有多个接口实现有公用的部分,则使用抽象类,然后集成它。

 

参考资料

Java接口和抽象类用法实例总结

Java抽象类与接口的区别


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip
毕设新项目基于python3.7+django+sqlite开发的学生就业管理系统源码+使用说明(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 学生就业管理系统(前端) ## 项目开发环境 - IDE: vscode - node版本: v12.14.1 - npm版本: 6.13.4 - vue版本: @vue/cli 4.1.2 - 操作系统: UOS 20 ## 1.进入项目目录安装依赖 ``` npm install ``` ## 2.命令行执行进入UI界面进行项目管理 ``` vue ui ``` ## 3.编译发布包(请注意编译后存储路径) #### PS:需要将编译后的包复制到后端项目的根目录下并命名为'static' 学生就业管理系统(后端) ## 1.项目开发环境 - IDE: vscode - Django版本: 3.0.3 - Python版本: python3.7.3 - 数据库 : sqlite3(测试专用) - 操作系统 : UOS 20 ## 2.csdn下载本项目并生成/安装依赖 ``` pip freeze > requirements.txt pip install -r requirements.txt ``` ## 3.项目MySQL数据库链接错误 [点击查看解决方法](https://www.cnblogs.com/izbw/p/11279237.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值