Java学习----(六)抽象类,接口以及抽象类和接口的区别_抽象类和接口代码举例的区别(2)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

1.接口的基础语法

  • 接口也是一种引用数据类型,编译之后也是一个.class字节码文件
  • 接口是完全抽象的(抽象类是半抽象)或者也可以说接口是特殊的抽象类
  • 接口怎么定义,语法是什么?
    [修饰符列表] interface 接口名()
  • 接口支持多继承,一个接口可以继承多个接口
  • 接口中只包含两部分内容:常量、抽象方法
  • 接口中所有元素都是public修饰的(都是公开的)
  • 接口中的抽象方法定义时,public abstract修饰符可以省略
  • 接口中的方法都是抽象方法,所以接口方法中不能有方法体
  • 接口常量中的public static final可以省略
    注意:(1)类和类之间叫做继承,接口和接口之间叫做实现。别多想,仍然可以将“实现”看作“继承”。继承使用extends关键字完成,实现使用关键字implements完成
       (2)当一个非抽象类实现接口的话,必须将接口的所有方法实现(覆盖/重写)
  • 一个非抽象的类。实现接口的时候,必须将接口的所有方法实现
  • 一个类可以实现多个接口
  • 使用接口,可以使用多态

例子一:接口多态联合使用

public class Test01{
		public static void main(String[] args){
			//错误:Mymath是抽象的无法实例化
			//new Mymath();
			//能使用多态吗?
			//可以
			//Animal a = new Cat();
			
			//父类型的引用指向子类型的对象
			Mymath mm = new MymathImpl();
			//调用接口里面的方法(面向接口编程)
			int result1 = mm.sum(10,20);
			System.out.println(result1);

			int result2 = mm.sub(20,10);
			System.out.println(reault2);	
		}
}
//特殊的抽象类,完全抽象的,叫做接口
interface Mymath{
	double PI =  3.1415926;
	int sum(int a, int b);
	int sub(int a, int b);
}


例子二:一个类可以实现多个接口

interface A{
	void m1();
}
interface B{
	void m2();
}
interface C{
	void m3();
}
class D implements A,B,C{
	//实现接口A的m1()
	public void m1(){	
	}
	//实现接口B的m2()
	public void m2(){
	}
	//实现接口C的m3()
	public void m3(){
	}
}

注意:一个类可以同时实现多个接口,这种机制弥补了java中类和类只支持单继承,实际上单继承是为了简单而出现的,但现实中存在多继承,java中的接口弥补了单继承带来的缺陷

接口A和接口B之间没关系,也可以强转,编译过程不报错,运行时可能会出现ClassCastException异常。编译没问题,运行结果有问题,像之前一直一样,需要先 if + instanceof 进行判断。

例子三:继承和实现都存在的话怎么写?
  extends关键字在前,implements关键字在后

public class Test02{
		public static void main(String[] args){
		}
}
//动物类:父类
class Animal{
}

//可飞翔的接口(是一对翅膀)
interface Flyable{
	void fly();
}

//动物子类:猫类
//Flyable是一个接口,是一对翅膀的接口,通过接口插到猫身上,让猫变得可以飞翔
class Cat extends Animal implements Flyable{
}

接口通常提取的是行为动作。

2.接口在开发中的作用

接口在开发中的作用,类似于多态在开发中的作用

  • 接口:是完全抽象,面向接口编程,有了接口就有了可插拔,可插拔表示扩展力强,不是焊死的。

主板和内存条之间有插槽,这个插槽就是接口,内存条坏了,可以重新买一个换下来,这叫做高扩展力(低耦合度)。

接口可以解耦合,解开的是谁和谁的耦合。任何一个接口都有调用者和实现者,接口可以将调用者和实现者解耦合,调用者面向接口调用,实现者面向接口编写实现。

以后项目的开发,一般都是将项目分离成一个模块一个模块的,模块于模块之间采用接口衔接,降低耦合度。

  • 多态:面向抽象编程,不要面向具体编程,降低程序的耦合度,提高程序的扩展力

例子四:面向抽象编程好处

public class Master{
		public void feed(Dog d){}
		public void feed(Cat c){}
		//假设又要养其他宠物,那么这个时候需要再加一个方法。(需要修改代码了)
		//这样扩展力太差了,违背了OCP原则(对扩展开放,对修改关闭)
}
public class Master{
		public void feed(Animal a){
		//面向Animal父类编程,父类是比子类更抽象的
		//所以我们叫做面向抽象编程,不要面向具体编程
		//这样程序的扩展力就强

		}
}

3.类型和类型之间的关系:is a 、has a、like a

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

术提升。**

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 21
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值