Java核心语法——接口

接口

简述

含义:
  接口,规则,协议
  接口,即定义规则——规定某些方法的修饰符、返回值类型、方法名、参数列表、方法异常申明、方法的实现功能

好处:
  因为有了规则,那么方法的具体实现和调用可以分离,减少耦合性

关键字:interface、implements

格式:
  接口格式::interface 接口名{……}
  实现类格式:calss 实现类名 implements 接口名{……}

作用:用于定义方法,所以只包含抽象方法

【特点】:不可实例化,只有抽象方法(jdk8之前)、常量

【注意】:
1)成员变量
  ①没有成员变量,只有常量
  ②解释:接口不可创建对象,不能在堆内存中申请空间
2)构造方法
  ①没有构造方法,因为没有要初始化的成员变量
  ②实现类不访问接口的构造方法,而是访问父类的构造方法
3)成员方法
  ①全是抽象方法
  ②写 类型 方法名();即可,会自定补充public abstract
4)实现类
  如果重写了接口的所有抽象方法,那么它就是一个普通类(只是和接口产生了联系),可以实例化
  如果没有重写所有抽象方法,那么它就是一个抽象类(抽象方法只能放在抽象类中),不可实例化

接口、实现类举例:

interface Inter {
	public abstract void min();
	public abstract void max();
}

class Impl implements Inter {

@Override
public void min() {
	System.out.println("这是min方法的实现1");
}

@Override
public void max() {
	System.out.println("这是max方法的实现1");
}

}

abstract class Impl2 implements Inter {
@Override
public void min() {
	System.out.println("这是min方法的实现2");
}
}

类、接口之间的相互关系

1)类与类
继承:extends
原则:单继承,多层继承
2)类与接口
实现:implements
原则:单、多实现(一个类可以实现多个接口)
格式:class 类名 implements 接口1,接口2,……{……}
注意:接口1与接口2之间不能矛盾
继承父类实现接口:class 子类名 extends 父类名 implements 接口1,接口2……{……}
3)接口与接口
继承:extends
原则:单、多继承,多层继承
格式:interface 接口名 extends 接口1,接口2,……{……}
原则:接口1与接口2之间不能冲突

定义接口与类的原则

原则:把拓展的、特有的定义为接口
例如:人都会吃饭、睡觉,所以将其定义为类;学习是学生特有的,将学习定义为接口。学生又是人类,所以学生继承人类后 实现学习接口(为什么不将学生定义为人类的子类,因为它还要实现学生的学习功能)

在这里插入图片描述

匿名内部类(常用)

格式:

	new 父类或者接口名(){
	
			对父类或者接口中的方法的重写;
	};

【注意】:
1)必须存在继承或者是接口的实现的关系
2)只能调用父类或者接口中定义的方法,不能调用自己特有的方法
3)不能向下转型,类名都没有
4)可以将匿名对象赋值给父类或者接口的引用
初版:

public class demo_匿名内部类 {

	public static void main(String[] args) {
		//普通局部内部类
		class Wo implements Person{
			@Override
			public void eat() {
				System.out.println("我吃饭了");
			}
		}
		new Wo().eat();
		
		//匿名内部类
		new Person() {
			@Override
			public void eat() {
				System.out.println("吃饭了");
			}
		}.eat();
	}

}

interface Person{
	public abstract void eat(); 
}

精简版:lambda表达式

public class demo_精简匿名内部类 {

	public static void main(String[] args) {
		//精简版。lambda表达式
		Person per = () -> System.out.println("lambda表达式,吃饭了");
		per.eat();
		
		//方法引用
		Person1 per2 = System.out :: println;
		per2.eat();//只是换行,因为没有打印任何内容
	}

}

interface Person{
	public abstract void eat(); 
}

PS:
1)【】表示重要,删除线表示已解决
2)学习记录使用,如果存在错误还望指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈年_H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值