java中interface implements extends区别用法

 

interface是创建接口的语法

implements是使用接口的语法

例如:

创建一个接口:

public interface attack{

      void shoot();//默认为抽象类,不能以{}结尾,只能以()结尾

}

创建一个类使用接口:

public soldier implements attack{    //写具体的实现方法

            public void shoot(){

                     System.out.println("士兵射击");

             };

}

而extends是继承父类的方法,可以直接使用

例如:

public class kid{

void cry{

System.out.println("呜呜呜呜呜");

}

public class baby extends kid {
    public static void main(String[] args) {
        kid a = new kid();
        a.cry();
    }

}

就会输出“呜呜呜呜呜”。

简单吧。hhh

<think>嗯,用户想了解Java中泛型的使用方法和示例。首先,我需要回顾一下泛型的基本概念,确保自己理解正确。泛型主要用于在编译时提供类型检查,避免运行时出现类型转换错误,同时让代码更加通用和灵活。用户可能想知道如何定义泛型类、泛型方法,还有泛型接口,以及实际的应用场景。接下来,我需要参考用户提供的引用内容。引用1提到泛型方法、类和接口,还说明了类型擦除的问题。引用3和4讨论了泛型数组的创建和类型擦除的影响。引用5给出了接口和方法的示例,比如分页处理的工具类。这些内容可以帮助我构建回答的结构。用户的问题可能包括如何声明泛型类,比如一个泛型容器类,如何创建泛型方法,比如比较两个对象是否相等。此外,泛型接口的使用,比如集合框架中的List<T>,也是常见的例子。还有,用户可能对类型擦除和通配符的使用有疑问,比如上限和下限通配符的应用场景。我需要确保回答结构清晰,分点说明,每个部分都给出代码示例。例如,泛型类部分可以用一个简单的GenericsType类来展示,泛型方法则用isEqual方法演示。然后,通配符部分可以用打印集合元素的方法说明。此外,类型擦除的问题需要解释清楚,比如泛型在运行时的信息被擦除,所以无法直接实例化泛型数组,但可以通过反射动态创建,如引用3中的Array.newInstance()方法。还要注意用户可能关心的性能问题,比如泛型是否会影响程序效率。但根据知识,泛型在编译时进行类型检查,运行时没有额外开销,因为类型信息被擦除。所以这里需要明确说明,避免误解。 最后,生成相关问题时要涵盖用户可能进一步提问的方向,比如类型擦除的影响、通配符的作用、泛型与重载的关系,以及实际应用案例。这些问题可以帮助用户深入理解泛型的各个方面。需要检查示例代码是否符合Java语法,比如泛型类的定义、泛型方法的类型参数声明位置是否正确。例如,在泛型方法中,<T>应放在返回类型之前。同时,注意代码中的类型推断,如引用1中的isEqual方法调用时可以省略类型参数,编译器会自动推断。 另外,用户提供的引用中有提到泛型数组的创建问题,这点需要特别说明,因为直接创建泛型数组会导致编译错误,但使用反射可以绕过这个限制。例如,引用3中的示例使用Array.newInstance()动态创建数组,这可以作为注意事项的一部分。 总结一下,回答的结构应该是:基本概念、泛型类、泛型方法、泛型接口、通配符、注意事项(类型擦除和数组问题)、示例代码,最后是相关问题。需要确保每个部分都有明确的示例和解释,引用相关的引用内容来支持观点,比如引用1中的泛型方法示例,引用4中的类型擦除说明等。</think>Java泛型的使用方法及示例整理如下,包含6个核心应用场景和注意事项: ### 一、泛型类基本用法 定义泛型容器类: ```java public class GenericsType<T> { private T value; public void set(T value) { this.value = value; } public T get() { return value; } } ``` 使用示例: ```java GenericsType<String> strType = new GenericsType<>(); strType.set("Java"); ``` ### 二、泛型方法实现 静态泛型方法示例[^1]: ```java public static <T> boolean isEqual(GenericsType<T> g1, GenericsType<T> g2) { return g1.get().equals(g2.get()); } ``` 类型推断简化调用: ```java boolean equal = GenericsMethods.isEqual(strType1, strType2); ``` ### 三、泛型接口应用 泛型接口定义: ```java public interface GenericInterface<T> { void process(T element); } ``` 实现示例: ```java public class StringProcessor implements GenericInterface<String> { @Override public void process(String element) { System.out.println(element.toUpperCase()); } } ``` ### 四、通配符使用技巧 1. **上限通配符**: ```java public static void printList(List<? extends Number> list) { for (Number num : list) { System.out.print(num + " "); } } ``` 2. **下限通配符**: ```java public static void addNumbers(List<? super Integer> list) { for (int i = 1; i <= 5; i++) { list.add(i); } } ``` ### 五、注意事项 1. **类型擦除机制**:编译后泛型类型信息被擦除,例如`ArrayList<String>`和`ArrayList<Integer>`运行时类型相同[^4] 2. **泛型数组限制**:需通过反射创建: ```java T[] array = (T[]) Array.newInstance(type, size); // 动态创建数组[^3] ``` ### 六、实际应用案例 分页工具类实现[^5]: ```java public static <T> PageResult<T> pageCl(IPage<T> iPage) { return new PageResult<>(iPage.getRecords(), iPage.getTotal()); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值