Java新手小白入门篇 Java面向对象(七)

本文详细介绍了Java接口的概念、特点和使用方法,并对比了接口与抽象类的区别,提供了丰富的示例代码帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、接口
1. 接口的概念
接口和之前我们学过的类一样,也是一种数据类型,它同样是我们引用类型的一种,接口从功能的角度讲与我们的抽象类有些类似,都是抽象出一个或多个需要实现的功能。但是相较于抽象类来说,接口更像是一套规则和标准。
概念和理解有些绕口,跳过并带着思考看下面的讲解:

2. 接口格式
interface 接口名 { // 代码实现... }

3. 接口的特点
通过 interface 关键字来定义接口
通过 implements 让子类实现接口
我们称这种子类叫 实现类
接口中的访问控制修饰符默认都是 public
接口中的成员变量默认都是静态常量
可以省略 public static fianl
接口中的方法都是抽象方法(JDK8之前)
可以省略 public abstract
JDK8以后接口中支持static,default修饰的方法
public static void sayHi() {}
public default void sayHello() {}
接口中没有构造方法
接口突破了Java单一继承的局限性
类与接口之间可以多实现(implements),接口与接口之间可以多继承(extends)
接口是对外暴露的规则,是一种规范
接口提高了程序的扩展性,降低了耦合性
4. 接口练习
4.1 定义接口,实现类
// 接口
public interface Inter {
}

// 实现类
public class InterImpl implements Inter{
}

4.2 接口中的访问控制修饰符默认都是 public

请添加图片描述
4.3 接口中的成员变量默认都是静态常量
案例一:

 请添加图片描述

 


public interface Inter {
    int num1; // 报错,接口中的变量都是常量(静态),所以必须初始化
    int num2 = 5;
}

案例二:

 


public interface Inter {
    // int num1; // 接口中的变量都是常量(静态),所以必须初始化
    int num2 = 5;
}
public class InterDemo {
    public static void main(String[] args) {
        // 接口中的变量都是常量(静态),所以不能改变
        Inter.num2 = 10; // 报错
        // 接口中的变量都是常量(静态),所以通过类名点调用
        System.out.println(Inter.num2);
    }
}

4.4 接口中的方法都是抽象方法(JDK8之前)
前提: 需要将 IDEA 项目的语言等级调整至JDK7及以下

请添加图片描述
public interface Inter {
    void say() {} // 报错,JDK7以前接口中的方法都是抽象方法,没有方法体
    void eat();
}

4.5 JDK8以后接口中支持static,default修饰的方法
public interface Inter {
    
    void say();
    
    default void sayHi(){
    }
    
    static void sayHello() {
    }
}

4.6 接口中没有构造方法

 请添加图片描述

 


public interface Inter {
    Inter(){} // 报错,接口中没有构造方法
}

4.7 类与接口之间可以多实现(implements)

请添加图片描述
public class InterImpl implements Inter1,Inter2{ }
public interface Inter1 { }
public interface Inter2 { }

4.8 接口与接口之间可以多继承(extends)

 请添加图片描述

 


public interface Inter extends Inter1,Inter2 { }
public interface Inter1 { }
public interface Inter2 { }

二、拓展
1. 类与接口之间的关系
类与类的关系

继承关系,只支持单继承
A是父类 B是子类
class B extends A {}
B具备A所有的功能(除了父类的私有资源和构造方法)
子类如果要修改原有功能,需要重写(方法签名与父类一致 + 权限修饰符 >= 父类修饰符)
类和接口的关系

实现关系,可以多实现
class A implements B,C {}
A是实现类,B和C是接口
A拥有BC接口的所有功能,只是需要进行方法的重写,否则A就是抽象类
接口与接口的关系

继承关系,可以单继承,也可以多继承
interface A extends B,C {}
ABC都是接口
A是子接口,具有BC接口的所有功能(抽象方法)
2. 接口与抽象类的区别
抽象类是由 abstract class 修饰的,接口是由 interface 修饰的,interface 需要被实现 implements,而 abstract class 需要被继承 extends
抽象类中可以有成员变量,也可以有常量,接口中都是常量
抽象类中可以有普通方法也可以有抽象方法,接口中都是抽象方法(Java8 以后可以有普通方法,但是普通方法必须由 static 或 default 修饰的
抽象类中可以定义构造方法,接口中不能定义构造方法,但是都没有意思,因为不能被实例化
抽象类中任何访问控制修饰符都可以,接口中访问控制修饰符只能为 public
三、练习
1. 判断对错,如果错了,说出为什么,怎么修改
1.1 练习1:

public interface Inter {
    int num;
}
1.2 练习2:

public interface Inter {
    int num = 5;
}
public class InterDemo {
    public static void main(String[] args) {
        Inter inter = new Inter();
        System.out.println(inter.num);
    }
}
1.3 练习3:

public interface Inter {
    int num = 5;
}
public class InterDemo {
    public static void main(String[] args) {
        Inter.num2 = 10;
    }
}
1.4 练习4:

public interface Inter {
    void say() { } 
}
1.5 练习5:

public interface Inter {  
    void say();    
    default void sayHi(){ }    
    static void sayHello() { }
}
1.6 练习6:

public class InterImpl implements Inter1,implements Inter2 { }
public interface Inter1 { }
public interface Inter2 { }


1.7 练习7:

public interface Inter extends Inter1,extends Inter2 { }
public interface Inter1 { }
public interface Inter2 { }

1.8 练习8:

public class Demo implements Inter extends AbstractClass { }
public abstract class AbstractClass{ }
public interface Inter { }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值