接口的介绍和使用

关键字interface接口:
主要用途就是被实现类实现(面向接口编程)

1.解释:有时必须从几个类中抽取出一些共同的行为特征
继承是一个"是不是"的关系,而接口实现则是 "能不能"的关系
接口的本质是契约,标准,规范

2.interface与类并列

3.如何定义接口:

JDK7.0之前:只能定义全局常量和抽象方法

全局常量public static final,但是写时可以省略(在接口中写)

interface Flyable{
	public static final int max_num= 100;//全局常量
	int min_num = 1;//全局常量
}

抽象方法public abstract

**JDK8:**可以定义全局常量、抽象方法、静态方法、默认方法

静态方法(static):只能通过接口来调用,不能通过实现类去调用

interface Flyable{
	public static void method1(){
		//方法体
	}
}

默认方法(default):可以通过实现类去调用
interface Runable{//两种书写方法
	public default void method2(){
		//方法体
	}

}

interface Flyable{
	default void method2(){
		//方法体
	}
}

如何在子类(或实现类)的方法中调用父类、接口被重写的方法

①*如果实现类重写了接口中的默认方法,调用的是重写以后的方法

class SubClass implements Runable{
	public void method2(){//方法体}//重写方法
		public void Mymethod(){
			method2();//调用的就是自己重写的
		}
}

②*如果子类(或实现类)继承的父类和实现的接口中声明了同名同参的方法,
那么子类在没有重写此方法的情况下,默认调用父类的同名同参方法(类优先原则)

class SubClass extends 父类 implements Runable{
	public void Mymethod(){
		method2();//调用的是父类的
	}
}

③*如果子类实现了多个接口,接口中还有同名同参的方法,
如果子类没有重写此方法就会编译报错

class SubClass implements Runable,Flyable{
	public void Mymethod(){
		method2();//编译报错
	}
}
//先继承后实现
class SubClass extends 父类 implements Runable,Flyable{
	public void method2(){//方法体};
	public void Mymethod(){
		method2();//调用自己重写的的
		super.method2();//调用父类的
		Runable.super.method2();//调用接口Runable的默认方法
		Flyable.super.method2();//调用接口Flyable的的默认方法
	}
}

补充:
接口中不能定义构造器!意味着接口不可以实例化

②Java开发中,接口通过让类去实现(implements)接口
---- 如果实现类覆盖了接口中所有抽象方法,则实现类就可以实例化
---- 如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类

面试题:抽象类与接口有哪些异同?

相同点:
不能实例化,内部结构不可以用private权限修饰符、都可以包含抽象方法、要有子类或实现类才有意义

====================================================
不同点:
接口:
没有构造器
jdk7.0之前:接口只能定义全局常量和抽象方法
jdk8.0之后:接口能定义全局常量、抽象方法、静态方法\默认方法(default修饰的方法)(public default void method(){ } )
且接口中可以省略public、final、abstract等关键字修饰符。
权限修饰符只能是public
支持多实现
=================================================
抽象类:
有构造器
内部可以定义全局常量的值和非全局常量的值、抽象方法、普通方法(非抽象方法)、静态方法
不能省略public、final、abstract等关键字修饰符
权限修饰符可以是public、protected、default(这里的是啥也不写 void method(){ })
只能单继承

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值