//定义接口
interface A{
interface B{
//支持多继承
interface C extends A,B{
5、接口当中只包含两部分内容,一部分是:常量,一部分是:抽象方法。
//我的数学接口
interface MyMath{
public abstract int sum(int a,int b);
6、接口当中所有的元素都是public修饰的。
7、接口当中的抽象方法定义时:public abstract修饰符可以省略。
8、接口当中的方法都是抽象方法,所有接口当中的方法不能有方法体。
9、接口当中的方法不能有大括号,因为大括号就是方法体,而抽象方法不能有方法体。
10、接口当中常量的修饰符:public static final可以省略。
11、常量不能重新赋值。
interface MyMath{
double PI=3.1415926;
//PI是常量
int sub(int a,int b);//相减的抽象方法
int sum(int a,int b);//相加的抽象方法
2、类实现接口
接口的基础语法:
1、类和类之间叫做继承,类和接口之间叫做实现。(其实仍然可以将实现看成是继承)
继承使用extends关键字完成
实现使用implements完成
当一个非抽象类实现接口的话,必须将接口当中所有的抽象方法全部实现。
interface MyMath{
double PI=3.1415926;
//PI是常量
int sub(int a,int b);//相减的抽象方法
int sum(int a,int b);//相加的抽象方法
class My implements MyMath{
public int sub(int x,int y){
return x-y;
public int sum(int x,int y){
return x+y;
public class Test02 {
public static void main(String[] args) {
MyMath m=new My();
//面向接口编程(调用接口里面的方法
int result=m.sub(10,20);
System.out.println(result);
int result2=m.sum(1,3);
System.out.println(result2);
//我的数学接口
interface MyMath{
double PI=3.1415926;
//PI是常量
int sub(int a,int b);//相减的抽象方法
int sum(int a,int b);//相加的抽象方法
class My implements MyMath{
public int sub(int x,int y){
return x-y;
public int sum(int x,int y){
return x+y;
4、extends和implements
问题:继承和实现都存在的话,代码应该怎么写?
如果同时出现继承和实现的话,继承的关键字在前面,实现的关键字在后面。
接口通常提取的是行为动作。
class Cat extends Animal1 implements Flyable{
public class Test04 {
public static void main(String[] args) {
Flyable f=new Cat();//多态
f.fly();
Flyable f1=new Pig();
f1.fly();
//动物类:父类
class Animal1{
//可飞翔的接口
interface Flyable{
void fly();
//动物类子类:猫类
//flybale是一个接口,即一对翅膀,通过接口插到猫身上,让猫可以飞翔
class Cat extends Animal1 implements Flyable{
public void fly(){
System.out.println("猫猫起飞!");
//动物类子类:蛇类
//如果不想让蛇飞,就不实现flyable接口
//没有实现这个接口就表示没有翅膀,那肯定不能飞翔
class Snack extends Animal1{
//动物类子类:猪类,想让猪飞,插接口
class Pig extends Animal1 implements Flyable{
public void fly(){
System.out.println("猪猪起飞!");
顾客有一个菜单 Customer has a FoodMenu,凡是能够使用has a 来描述的,统一以属性的方式存在
Cat is a Animal 凡是满足 is a 的表示都可以设置为继承。
西餐厨师类:
//西餐厨师实现菜单上面的菜
public class AmericanCooker implements FoodMenu{
public void xiHongShiJidan(){
System.out.println("西餐中的西红柿炒鸡蛋");
public void yuXiangRouSi(){
System.out.println("西餐中的鱼香肉丝");
中餐厨师类:
//中餐厨师实现菜单上面的菜。厨师是接口的实现者。
public class ChinaCooker implements FoodMenu{
public void xiHongShiJidan(){
System.out.println("中餐中的西红柿炒鸡蛋");
public void yuXiangRouSi(){
System.out.println("中餐中的鱼香肉丝");
public class Customer{
//面向接口编程
private FoodMenu foodmenu;//私有化体现封装性,则要提供set和get方法
public Customer() {
public Customer(FoodMenu foodmenu) {
this.foodmenu = foodmenu;
public FoodMenu getFoodmenu() {
return foodmenu;
public void setFoodmenu(FoodMenu foodmenu) {
this.foodmenu = foodmenu;
public void order(){
//方法一:使用get方法拿到菜单
FoodMenu f=this.getFoodmenu();
//方法二:直接使用foodmenu,因为私有的属性可以在本类当中使用
foodmenu.xiHongShiJidan();
foodmenu.yuXiangRouSi();
public interface FoodMenu {
void xiHongShiJidan();
void yuXiangRouSi();
public class Test {
public static void main(String[] args) {
//创建厨师对象(多态)
FoodMenu menu1=new ChinaCooker();
FoodMenu menu2=new AmericanCooker();
//创建顾客对象
Customer m1=new Customer(menu1);
Customer m2=new Customer(menu2);
//顾客点菜
m1.order();
m2.order();
}