Java学习---day09_接口与内部类

本文介绍了Java中的接口和内部类。接口用于实现多继承,提供了抽象方法和静态方法,并详细讲解了接口的定义、实现、继承和多态。内部类包括成员内部类、静态内部类、局部内部类和匿名内部类,它们各具特点,可以增强代码的封装性和可读性。文章还探讨了接口与抽象类的异同以及内部类的作用和使用场景。
摘要由CSDN通过智能技术生成

Java学习—day09_接口与内部类

接口

接口的定义
  • 属性

    • 接口中的属性,默认都是静态常量,访问权限都是public

    • 例:

      public static final String INTERFACE_FIELD = "value";
      
  • 方法

    • 接口中的方法,默认都是抽象方法,访问 权限都是public

    • 例:

      public abstract void method();
      

ps:一般接口中不写成员变量,只写方法,相当于制定规则,所以又将接口称为方法列表

接口的作用:

java从单继承间接的实现了多继承,扩充了原来的功能,我们可以认为接口是类的补
充。

接口和抽象类的异同(经常出面试题)
  • 相同点:
    • 都可以编译成字节码文件
    • 都不能创建对象
    • 都可以声明引用
    • 都具备Object类中所定义的方法
    • 都可以写抽象方法
  • 不同点:
    • 接口中所有的属性,都是公开静态常量,可以省略使用 public static final 修饰。
    • 接口中所有的方法,都是公开抽象方法,可以省略使用 public abstract 修饰。
    • 接口中没有构造方法、构造代码段、静态代码段。
接口的实现

接口,需要让类实现,表示这个类具有了这个接口定义的能力。因为接口中有很多的
抽象方法,因此类在实现接口的时候,如果不是抽象类,必须要重写实现接口中所有
的抽象方法。

定义接口,需要使用到关键字interface

public interface MyInterface {
    //这里默认省去abstract,即public abstract interface MyInterface
    public static final String INTERFACE_FIELD = "value";   // 接口中的属性定义
    public abstract void method();                         // 接口中的方法定义
}
 
// 非抽象类实现接口,必须重写实现接口中所有的抽象方法
class MyInterfaceImpl implements MyInterface {
    @Override
    public void method() {}
}
 
// 抽象类实现接口,接口中的抽象方法,可以实现,也可以不实现
abstract class MyInterfaceAbstractImpl implements MyInterface {}

ps:

  • 一个类可以实现多个接口

  • 如果两个接口中定义了两个同名、同参数的方法,但是返回值不同。那么类是没
    有办法同时实现这两个接口的。因为在同时实现的时候,无法最终确定这个方法
    的返回值类型。

接口的继承
  • 接口之间也是存在继承关系的,与类的继承相似,子接口可以继承到父接口中所有的
    成员的。
  • 与类的继承不同,接口之间的继承是多继承。也就是说,一个接口是可以有多个父接
    口的。子接口可以继承到所有的父接口中的成员
interface SuperInterface1 {
   
    void method1();
}
interface SupeInterface2 {
   
    void method2();
}
// 此时,在这个接口中,继承到了所有的父接口中的方法,同时定义了自己独有的方// 实现类在实现这个接口的时候,需要实现 method1、method2、method3 三个
方法
interface SubInterface extends SuperInterface1, SuperInterface2 
{
   
    void method3();
}

ps:一个类实现多个接口的时候,多个接口中不能存在有冲突的方法。接口在继承
父接口的时候,也不允许同时继承两个有方法冲突的接口。

  • 父类与接口的功能如何分配?
    • 一般父类中放的是主要功能,接口中放的是额外的功能,接口作为父类的补充
  • 当一个类实现的接口中出现了相同的方法,子类中实现方法的时候会不会混淆?
    • 不会,接口中的方法都是抽象的,要通过子类写具体的实现.我们在调用方法时,最终看的
      功能,而功能只有子类中的一份.
接口中的多态

接口的引用,可以指向实现类的对象。与类的多态相似,同样存在向上转型和向下转
型。

  • 向上转型:实现类类型转型为接口类型。
    • 是一个隐式转换,不需要任何的修饰。
    • 向上转型后的接口引用,只能访问接口中的成员。
  • 向下转型:接口类型转型为实现类类型。
    • 是一个显式转换,需要强制类型转换。
    • 向下转型后的实现类引用,将可以访问实现类中的成员。
接口的新特性【了解】

Java8中,为接口添加了两个新特性:

  • static方法:可以在接口中定义静态方法,静态方法不是抽象方法,是有实现部
    分的。同时,这个静态方法,只能由当前的接口名字调用,接口的引用和实现类
    都是不能使用的。
interface MyInterface {
   
    public static void method1() {
   
        System.out.println("接口中的静态方法实现");
    }
}
 
class Person implements MyInterface{
   
    //这里不可以重写method1方法
}
 
public class Demo8 {
   
    public static void main(String[] args) {
   
            MyInterface.method1();  //正确,只能通过接口名字来调用
        MyInterface m = new Person(); //接口的多态
        m.method1();  //错误
        Person.method1();//错误
    }
}
  • default方法:修饰接口中的方法,default修饰的方法可以添加默认的实现部
    分。此时,实现类在实现接口的时候,对于这些方法可以重写,也可以不重写
interface MyInterface {
   
    public default void method2() {
   
        System.out.println("接口中的方法默认实现");
    }
}
 
class Person implements MyInterface{
   
    //可以重写method2方法
}
 
public class Demo8 {
   
    public static void main(String[] args) {
   
     	MyInterface m 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值