JAVA 面向对象(接口的特征与实现)

我们在过去说的类的继承,是单继承的。但是我们很多时候不想只有一个爸爸,我们还想要找一些干爹,这样才好办事嘛。这个时候我们往往需要另一个方法,来去认干爹,这个方式就是接口。
Java接口和Java抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现。OOP面向对象的编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口的编程,面向抽象的编程,正确地使用接口、抽象类这些太有用的抽象类型做为java结构层次上的顶层。
这句话可能很绕口,其实它的意思就是说为了避免大量重复的代码我们可以通过接口也就是抽象的形式来仅仅对某事物的功能进行抽象化,等待子类去重写这个功能的具体作用。

接口的特点

我们首先要知道一个东西,爸爸和干爹是不一样的,你继承你爸爸的东西,用你爸爸的东西是非常容易的也就是说你拿来用就可以,而接口既然是干爹,让你用,自然是要付出代价的,或者说是需要你自己做一点努力的。这个的主要问题就是因为接口中的方法都是抽象方法,想用得自己去重写该方法。
第二、我们要清楚爸爸只能有一个,干爹却可以有好几个。接口作为干爹的一种自然突破了类与类之间单继承的局限性
第三、除了你可以认识好几个干爹外,你的干爹自然也可以认识干爹,甚至比你认识的更多。接口和接口之间可以多继承
第四、接口中也是有常量的。此处的常量是指具有final关键字修饰的常量,也就是说在定义常量时需要赋值且值不可变

接口的使用

首先我们知道我们喊爸爸的方式是extends,那么我们喊干爹自然有喊干爹的方式implements其次我们要明白你毕竟是爸爸的亲儿子所以咱们当时定义类的关键字是class,而干爹定义的关键字是interface其实这个单词的英文便是接口。
下面为了更好地了解怎么使用,我把代码分为几类一点点去补全:
首先我们定义三个接口,一个类,接口中各写一个或两个方法。

public class Interface {
	public static void main(String[] args) {
	}
}
interface Eat{
	//void eat();
	 void eat1();
	 abstract void eat2();
}
interface Sleep{
	void sleep();
}
interface Call{
	void call();
}
class Animal implements Eat,Sleep,Call{
	
}

如果那个小伙伴复制粘贴了,或者是大佬来看的话,会发现这个代码是有问题的,这个问题在抽象类中我们曾经说过,当一个类中有一个抽象方法,那么它是抽象类,因此在此处我们使他继承了这么多抽象方法我们需要给他加一个抽象关键词。

abstract class Animal implements Eat,Sleep,Call{
	
}

不报错了,可以实现继承多个接口,没骗你们吧!
然后如果大家够细心就会发现我在Eat接口中写了两个抽象方法,一个加了abstract一个没加,但是都没报错,这说明了我们在定义方法的时候默认是加上了abstract,同时我们在来看:

abstract class Animal implements Eat{
	void play() {
	}
	public void eat2() {
	System.out.println("w");	
	}
}

这个代码看上去平平无奇,实则是一个重点,我们可以看到我在上边随便定义了一个方法不需要public,但是下边这个重写的函数,重写函数必须要加上public否则会报错,哪怕是加private也会报错。这里的原因其实在封装那里我们也说过。默认的方法修饰符为default也就是说是同一个包内可见,此时我们是public,也就是说我们定义的接口是针对整个文件的而非某个包。
然后我们看成员变量:

interface Eat{
	//void eat();
	void eat1();
	//	 abstract void eat2();
	int a=1;
}
abstract class Animal implements Eat{
	void play() {
		a=1;
	}
	public void eat2() {
	}
}

我们在定义时必须对其进行赋值,而且这个值后续是不能修改的,原因在于如果我们不加修饰词系统会默认加入修饰词:final
同时我们在main函数中加入System.out.println(Animal.a);输出1,由此可知他还有一个修饰词:static.同时根据他的使用范围包括我们在方法中的发现我们可以知道它应该还有一个修饰词:public
因此这个a在定义时的完整格式应该是public static final int a=1;
然后我们再试一个东西:

interface Sleep extends Eat,Call{
	void sleep();
}

我们可以知道接口也可以继承接口,同时还可以继承多个。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值