java基础(1)-接口

各JDK版本中的接口可以包含的内容
  1. JDK7中接口可以包含的内容:常量、抽象方法
  2. JDK8中接口可以包含的内容:常量、抽象方法、默认方法、静态方法
  3. JDK8中接口可以包含的内容:常量、抽象方法、默认方法、静态方法、私有方法
接口中的抽象方法定义
  1. 接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract
  2. 这两个关键字修饰符可以选择性地省略
接口的使用步骤:
  1. 接口不能直接使用,必须有一个“实现类”来“实现”该接口,格式:
    public class 实现类名称 implements 接口名称{ }
  2. 接口的实现类必须覆盖重写接口中的所有的抽象方法,实现方式为:去掉abstract关键字,加上方法体大括号
  3. 创建实现类的对象,进行使用,使用接口中的抽象方法时,不能直接new接口,只能new实现类
//定义接口
public interface demo01 {
	public abstract void methodAbs();
}
//接口实现类
public class demo01_impl implements demo01{
	public void methodAbs() {
		System.out.println("这是抽象方法");
	}
}
//调用实现类中的方法
public class test1 {
	public static void main(String[] args) {
		demo01_impl impl=new demo01_impl();
		impl.methodAbs();
	}
}

接口中的默认方法(default)
  1. why?如果一个接口已经被大量的类实现,如果需要再扩充这个接口的功能添加新的方法,则需要所有已经实现的子类重写这个方法,所以从JDK8开始新增了默认方法,便于接口的扩展
  2. 定义规则
    1. 默认方法使用 default 关键字,一个接口中可以有多个默认方法;
    2. 接口中既可以定义抽象方法,又可以定义默认方法,默认方法不是抽象方法
    3. 子类实现接口的时候,可以直接调用接口中的默认方法,即继承了接口中的默认方法,也可以复写该方法,如果同时实现了两个接口,且两个接口中定义了一样的默认方法,则必须重写默认方法,不然会报错。
  3. 实例:
interface Cat {
	//默认方法
	default void run() {
		System.out.println("猫跑");
 	}
 	default void climb() {
​		System.out.println("猫爬树");}
}
//WhiteCat实现Cat
class WhiteCat implements Cat {
	//重写默认方法
	public void run() { 
​		System.out.println("白猫跑");
 	}
}
public class Demo04Interface {
	public static void main(String[] args) {
		WhiteCat cat = new WhiteCat();
		cat.run(); //调用子类中重写的方法
 		cat.climb(); //调用接口中默认方法
	}
}
抽象类和接口的异同以及使用场合
抽象类
  1. 抽象类:包含抽象方法的类,即使用abstract修饰的类
  2. 特点:
    1. 抽象类不能被实例化,只能被继承
    2. 抽象类中可以不包含抽象方法(不包含抽象方法就没有太大意义,可以作为工具类防止被实例化)
    3. 抽象类的子类可以不实现所有的抽象方法,但必须也为抽象类
    4. 抽象类的构造方法不能定义成私有
    5. 抽象类不能被final修饰,因为final修饰的类不能被继承
    6. 抽象方法必须为public或者protected(如果为 private则不能被子类继承,子类便无法实现该方法),缺省的情况下默认为public。
接口
  1. 接口:一种特殊的抽象类
  2. 特点:
    1. 接口中没有构造器,不能被实例化
    2. 接口只能继承接口,不能继承类,接口支持多继承
    3. 接口中定义的成员变量,默认为是public static final 修饰的静态变量
    4. 接口中定义的方法,默认是public static 修饰的静态内部类
    5. 接口中定义的方法,默认是public abstract修饰的抽象方法,在JDK8中,接口也可以定义静态方法,不能通过实现类的对象来直接调用,可以直接使用接口名进行调用
    6. 如果实现类所实现的多个接口中的抽象方法存在重复,没关系
    7. 如果实现类所实现的多个接口中的默认方法存在重复,则子接口必须进行默认方法的覆盖重写
接口和抽象类的异同点
  1. 语法层面
    1. 相同点:
     1. 抽象类和接口都不能被实例化
     2. 抽象类和接口都可以定义抽象方法,子类(可以不用实现,则子类也是抽象类)/实现类必须复写这些抽象方法
    2. 不同点
     1. 抽象类有构造方法,接口没有
     2. 抽象类中的成员变量可以是各种类型的,接口中的成员变量只能是public static final 类型的
     3. 抽象类可以包含普通方法,接口中只能是public abstract修饰抽象方法
     4. 抽象类只能是单继承,接口可以多继承
  2. 设计层面
      抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象,例如可以将飞机和鸟定义为不同的抽象类,但是可以将飞定义为一个接口。

参考资料https://blog.csdn.net/qq_37766026/article/details/90702387

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值