Java基础-抽象类和接口的学习

本文详细阐述了抽象类和接口的概念、特点及它们之间的区别。抽象类作为类的抽象,允许包含抽象方法和非抽象方法,以及构造器,主要用于通过继承实现代码复用。接口则仅包含抽象方法和常量,没有构造器,强调的是功能的实现,适用于“likea”关系的设计。类可以单继承抽象类,同时实现多个接口,体现了Java的多态特性。抽象类和接口的选择取决于设计需求,抽象类强调“isa”关系,接口关注额外功能。
摘要由CSDN通过智能技术生成
1.抽象类
1)概念
在一个类中,将某个功能给出一个声明(抽象方法:没有方法体的方法),那么该类定义为抽象类
	举例:
		动物--->本身是一个抽象的事物
		给出能吃的功能--->将eat方法:没有方法体{}
关键字:abstract:修饰类、修饰方法:抽象的意思!
2)抽象类的注意点:
1)如果一个类中,有抽象方法,那么该类一定是抽象类;抽象类中一定是抽象方法吗?,也可以有非抽象方法
2)抽象类如何实例化呢? 抽象类如何创建对象
		抽象类不能直接实例化! ,通过具体的子类进行实例化
  			格式:
  			父类名 对象名  =new  子类名() ; 抽象类多态
3)抽象类的子类:
  		子类要么具体类,要么抽象类
 		子类是具体类,直接可以抽象类多态的形式实例化!
 		子类是抽象类,应该还要提供更最具体的子类,否则都无法实例化(没有意义!)
4)在抽象类中定义抽象方法的时候,那么抽象方法必须带上修饰符:abstract,不能省略!
3)抽象类的本质
强制子类必须完成的事情!
4)抽象类的特点
1)成员变量:
		既可以定义常量,也可以定义变量
2)成员方法:
 		即可定义抽象方法(必须要有abstract),也可以定义非抽象方法 
3)构造方法:
  		还是继承关系,构造方法:对数据进行初始化---->分层初始化!
5)实例化
有抽象方法的类一定是抽象类,那么如果一个类中没有抽象方法,这个类可以不可以定义为抽象类呢?
  --->可以,意义是什么?
     --->意义:就是让当前类不能够直接实例化(实例化:创建对象)
  		-->那么如何实例化呢?
  	它会提供一个静态功能,返回值就是该类本身! (Java中一种设计模式)
  举例:	
  		Calendar:常用类  ---日历类		是一个抽象类 (Java提供一个日历类)
  		在当前类提供了一个静态功能
  		public static Calendar getInstance() 
6)abstract关键字不能和哪些关键字共存
不能和final一块使用:
  	final修饰成员方法:方法不能被重写,但是abstract修饰的方法,强制类完成的事情!
不能和private一块使用:  private只能在类中访问!
    被static修饰的方法直接使用类名调用,---->但是抽象方法又需要让子类重写(静态方法算不上方法重写)
 
方法重写注意事项:
  	子类继承父类,子类重写父类的方法必须保证访问权限足够大,使用public修饰(要么跟父类的修饰符保持一致)
2.接口
1)概念
interface 接口名{
  			...
  		}


接口中的方法只能是抽象方法,不能有方法体
  		接口的命名规则:多个单词---->遵循"大驼峰命名法"
  
 		接口的实现类和接口是一种:implements 实现关系
  		
  		将接口的实现类--->称为"接口的子实现类"
2)接口实例化
接口不能直接实例化 ,
  	格式:
 		接口名 对象名 =new 子实现类名() ; //接口多态 
  	
  	开发中:做项目的时候
  		接口----->接口子实现类(接口名的后面+impl) 
  		命名格式:
  			用户模块
  			用户接口
 				UserDao:(dao---->Data Access Object :数据访问对象)
  			用户接口实现类
  				class UserDaoImpl  implements UserDao{
  				
  				}
3)接口的特点
成员变量: 只能常量,被静态修饰
		存在默认修饰符:public satic final...(可以省略不写!)
成员方法:
  		接口中的方法只能是抽象方法,存在默认修饰符:public abstract(可以省略不写!)
构造方法:
  		接口没有构造方法!
4)关系问题
类与类之间(继承的时候用了)
  	继承关系,只支持单继承,不支持多继承,但是可以多层继承!
类与接口之间
	实现关系,一个类在继承另一个类的同时,可以实现多个接口!
接口与接口之间
  	继承关系,可以单继承,也可以多继承
3.抽象类和接口的区别
1)成员的区别
		抽象类:
				成员变量:既可以定义常量,也可以变量
				成员方法:既可以是抽象方法,也可以是非抽象方法
				构造方法:存在,存在无参构造/有参构造,对数据进行初始化!
		接口:
				成员变量---->此时是一个常量:存在默认修饰符
						public static final...
				成员方法:只能是抽象方法
				构造方法:不存在构造方法	
                
2)关系的区别:
		类与类之间:  extends,单继承,不支持多继承,但是可以多层继承!
		
		类与接口:实现关系:implements: 
					一个类继承另一个类的同时,可以实现多个接口!
		接口与接口:
				继承关系:extends
					可以单继承,也可以多继承!
					
3)设计理念的区别
		抽象类:
			由继承来保证代码的复用性,由多态来保证代码的扩展性
			----体现一种"is a"的关系
			
		接口:
			是一种额外的功能,体现的是一种"like a"的关系
			猫:部分猫可以跳高(实现跳高接口!)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值