Java初学之中的接口

什么是接口

如果一个抽象类中的所有方法都是抽象方法,那么这个抽象类就是接口(interface)。

接口的特点

接口中的抽象方法必须通过一个类来实现,格式为 实现类 implement 接口

其中实现类为实现了接口中抽象方法的类。

例如以下代码

public interface Father {
       void eat();
       void speak();
       void run();
}
public class Son implements Father{

	@Override
	public void eat() {
		System.out.println("吃东西");
		
	}

	@Override
	public void speak() {
		System.out.println("说话");
		
	}

	public void run() {
		System.out.println("奔跑");
		
	}

}

因为Son类实现了Father类之中的抽象方法,所以Son类是Father类的实现类。

1、如果一个类没有实现接口中的所有抽象方法,则该类必须为抽象类,例如下图中的Son1类。

public abstract class Son1 implements Father{

	

	@Override
	public void speak() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		
	}

}

2、接口中没有默认构造方法,而且也不能定义构造方法

接口中的方法都是抽象方法或者为static和default修饰的默认方法(后两者是在jdk1.8版本新增,在以前的版本里接口之中只允许存在抽象方法。)

在JDK8及其以后版本的JDK中,接口内可以定义静态方法(static修饰的方法)与默认方法(default关键字修饰的方法)。

接口中的静态方法实现类无法继承,默认方法实现类可以继承。

Whale无法调用IMammal接口中eat静态方法,说明Whale无法继承接口中静态方法

Whale可以调用IMammal接口中eat默认方法,说明Whale可以继承接口中默认方法。

 

3、接口一般以I开头(例如ISon,IFather,这是一个约定成俗的习惯)

4、接口中的变量为public static fianl常量

例如,在上面的Father类之中我们定义age属性——

int age=36;

在子类之中我们对age属性进行修改——给age赋值为40,显示报错。

这是因为在接口之中的变量已经默认被 public static fina这三个修饰词共同修饰,无法改动。

5、接口中的抽象方法默认public abstract

所以说我们定义抽象方法直接就可以用【void +方法名();】来声明

需要注意的事项

1、一个类可以实现一个或n个接口;如果一个类没有实现接口中所有的抽象方法,则该类必须为抽象类

2、接口重复抽象方法,实现类实现一个;接口中重复常量名,实现类必须指定到底调用哪个接口中的常量
我们再定义一个Mother接口


public interface Mother {
		void eat();
			int WEIGHT=80;
}

再在Father接口之中定义相同的变量WEIGHT


			int WEIGHT=100;

这时我们再发现子类之中只重写了一个eat()方法,但是没有报错,因为两个接口之中的eat方法是相同的。

如果名称相同而返回类型不同的话,比如一个是int eat(),一个是void eat()则会报错,而且java语法中不允许这种情况存在!

调用常量的话则必须指明是哪个类之中的常量比如Father.WEIGHT或者Mother.WEIGHT,单独的WEIGHT会报错。

3、public protected friendly private 只有public 和默认的能修饰类和接口
也就是说——接口和类前面的修饰词在这四个里面只能存在public和默认的,(friendly就是默认的,直接就是class 类名{},如果前面加friendly是错误的!

疑难辨析

Java只有单继承 

但是Java中接口可以多继承     

Java中只存在单继承   错   java类之中只存在单继承,java的接口之中可以多继承。

子接口可以实现父接口中的某些抽象方法  错  一旦实现接口的抽象方法,它要么是一个实现类要么是一个抽象类,接口不能实现抽象方法!

含有抽象方法的抽象类必须至少有一个子类完全实现了其抽象方法  对 

如果一个子类没有完全实现父类之中的抽象方法,那么它就是一个抽象类,而抽象类无法创建对象,里面的方法也就彻底失去了意义,可以这样说,在完全实现父类抽象方法的子类出现之前,父类以及其之前的所有子类都是抽象类,都是处于无法调用的状态!

含有抽象方法的抽象类一定至少会有一个非抽象类     对   

对,至少有一个非抽象类实现了抽象类的全部抽象方法。




 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值