Java基础--接口,内部类,注解

接口

        接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来。在Java中,接口(Interface)是一种抽象类型,它定义了一组抽象方法,但不提供这些方法的具体实现。接口是Java编程语言中实现多继承的主要机制之一,它允许一个类实现多个接口,从而具有多个行为。

nterface 接口名{

        //属性

        //方法(1 抽象方法 2 默认实现方法 3 静态方法)

}

public interface MyInterface {
    // 抽象方法
    void abstractMethod();

    // 常量(默认为 public static final)
    int MY_CONSTANT = 42;

    // 默认方法(Java 8+)
    default void defaultMethod() {
        System.out.println("Default method implementation");
    }

    // 静态方法(Java 8+)
    static void staticMethod() {
        System.out.println("Static method implementation");
    }
}

        类通过 implements 关键字实现接口,并提供接口中定义的抽象方法的具体实现。

class 类名 implements 接口{

        自己属性

        自己方法

        必须实现的接口的抽象方法

}

public class MyClass implements MyInterface {
    @Override
    public void abstractMethod() {
        System.out.println("Abstract method implementation");
    }
}

接口的作用:

  • 实现多继承: 类可以实现多个接口,从而具有多个接口定义的行为。这解决了Java中单继承的限制。

  • 定义规范: 接口定义了一组规范,实现类必须提供接口中定义的方法的具体实现。这有助于代码的规范性和可维护性。

  • 实现代码的组织和模块化: 接口有助于将代码分解为模块,提供了一种良好的组织结构,使得代码更易于理解和维护。

  • 默认方法和静态方法(Java 8+): 接口可以包含默认方法和静态方法,为接口的演变提供了更大的灵活性,同时也提供了在接口中添加新功能而不破坏实现类的机制。

  • 实现回调机制: 接口可以用于实现回调(Callback)机制,其中一个类实现接口的方法,而另一个类在需要时调用这些方法。

注意事项和细节:

        1.接口不能被实例化

        2.接口中所有方法是 public 方法,接口中抽象方法,可以不用 abstract 修饰

        3.一个普通类实现接口,就必须将该接口的所有方法都实现

        4.抽象类实现接口,可以不用实现接口的方法

        5.一个类可以实现多个接口

        6.接口中的属性,只能是 final 的,而且是 public static final 修饰符

        7.接口中属性的访问形式:接口名.属性名

        8.一个接口不能继承其他的类,但是可以继承多个别的接口(接口和接口之间是继承的关系)

        9.接口的修饰符 只能是 public 和默认,这点和类的修饰符是一样的

小结:当子类继承了父类,就自动的拥有了父类的功能。

        如果子类需要扩展功能,可以通过实现接口的方式扩展。

        可以理解 实现接口 是对 Java 单继承机制的一种补充。 

接口的多态

        多态参数

public class jkCanshuDuotai {
    public static void main(String[] args) {
//      接口的多态体现
//      接口类型的变量 if01 可以指向 实现了 IF 接口类的对象实例
        IF if01 = new Monster();
        if01 = new Car();
        
//      继承体现的多态
//      父类类型的变量 a 可以指向 继承 AAA 的子类的对象实例
        AAA a = new BBB();
        a = new CCC();
    }
}


interface IF {}
class Monster implements IF {}
class Car implements IF {}

class AAA {}

class BBB extends AAA {}
class CCC extends AAA {}

        多态数组

public class jkDuoTai {
    public static void main(String[] args) {
        Usb[] usbs = new Usb[2];
        usbs[0] = new Phone_();
        usbs[1] = new Camera();
        for (int i = 0;i <usbs.length;i++) {
            usbs[i].work();
            //需要进行向下转型
            if (usbs[i] instanceof Phone_) {    //判断他的运行类型是否是Phone_
                ((Phone_) usbs[i]).call();
            }
        }
    }
}


interface Usb {
    void work();
}

class Phone_ implements Usb {
    
    public void call() {
        System.out.println("手机可以打电话...");
    }

    @Override
    public void work() {
        System.out.println("手机正在工作...");
    }
}

class Camera implements Usb {

    @Override
    public void work() {
        System.out.println("相机正在工作...");
    }

}

内部类

        一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类,嵌套其他类的类称为外部类。是我们类的第五大成员(属性,方法,构造器,代码块,内部类),内部类最大的特点就是可以直接访问私有属性,并且体现类与类之间的包含关系。

基本语法:

class Out {        //外部类

        class In {        //内部类

        }

}

class Other {        //外部其他类

}

        Java内部类有四种类型:成员内部类(Member Inner Class)、局部内部类(Local Inner Class)、匿名内部类(Anonymous Inner Class)和静态嵌套类(Static Nested Class)。

成员内部类
public class OuterClass {
    // 外部类的成员和方法...

    // 成员内部类
    public class InnerClass {
        // 内部类的成员和方法...
    }
}

作用:

  1. 封装性和可读性: 内部类可以访问外部类的私有成员,从而提高封装性。同时,它可以使代码更有层次感,增强可读性。
  2. 关联性: 内部类与外部类之间建立了一种关联关系,可以更方便地访问外部类的成员。
  3. 实现多继承: 内部类使得一个类可以有多个不同的实现,从而实现多继承的一种形式。
局部内部类
public class OuterClass {
    // 外部类的方法...

    public void someMethod() {
        // 局部内部类
        class LocalInnerClass {
            // 内部类的成员和方法...
        }

        // 在方法中创建局部内部类的对象
        LocalInnerClass a = new LocalInnerClass();
    }
}

作用:

  1. 封装性: 局部内部类仅在声明它的方法内可见,有助于实现一种更加封装的设计。
  2. 限制作用域: 内部类可以在需要的地方声明和使用,避免了在整个类中暴露过多的细节。
 匿名内部类
 静态内部类 
自定义实现枚举

        1.不需要提供 setXxx()方法,因为枚举对象值通常为只读

        2.对枚举对象/属性使用 final + static 共同修饰,实现底层优化。

        3.枚举对象名通常使用全部大写,常亮的命名规范

        4.枚举对象根据需要,也可以有多个属性

注解

        注解的理解

1.注解也被称为元数据,用于修饰解释,包,类,方法,属性,构造器,局部变量等数据信息。

2.和注解一样,注解不影响程序逻辑,单注解可以被编译或运行,相当于嵌入在代码中的补充信息。

        使用元注解时要在其前面加上 @ 符号,并把该元注解当成一个修饰符使用。用于修饰它支持的元素。

1.@Override:限定某个方法,是重写父类方法,该注解只能用于方法。

2.@Deprecated:用于表示某个程序元素(类,方法等)已过时。

3.@SuppressWarnings:抑制编译器警告。

                元注解:修饰注解的注解就叫元注解。

Ending: 

        OK,本篇文章就到此结束了,非常感谢你能看到这里,所以如果你觉得这篇文章对你有帮助的话,请点一个大大的赞,支持一下博主,若你觉得有什么问题或疑问,欢迎私信博主或在评论区指出~ 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值