首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我们不能写类子实现AnyInterface在Java中扩展Base?

在Java中,我们不能通过实现AnyInterface来扩展Base类,这是因为AnyInterface类本身没有提供任何实现,因此无法在子类中实现。

为了解决这个问题,我们可以考虑使用接口(interface)来实现类似的功能。接口是一种声明方法(通常是抽象方法)的集合,它允许不同的类共享相同的接口,而不必实现它们。

在Java中,我们可以使用接口来实现Base类中的方法,然后让子类实现这些接口。例如:

代码语言:java
复制
public interface BaseInterface {
    void someMethod();
}

public class Base {
    public void someMethod() {
        // implementation
    }
}

public class SubClass extends Base implements BaseInterface {
    public void someMethod() {
        // implementation
    }
}

在上面的代码中,BaseInterface是一个接口,它包含一个someMethod()方法。Base类实现了BaseInterface接口,并提供了someMethod()方法的实现。SubClass类继承了Base类,并实现了BaseInterface接口,因此它也实现了someMethod()方法。

使用这种方式,我们可以让不同的类共享相同的接口,并且可以在子类中实现该接口,从而实现类似AnyInterface的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

解析java泛型(二)

上篇我们简单的介绍了java泛型的最基本的内容,知道了什么是泛型以及泛型对我们的程序编写有什么好处,最后以类型限定收尾。...java为什么不允许这种机制的存在,我们不妨现假设java不存在这种机制,也就是可以对通配符类型进行修改设置其值,语句:Pair,而max方法需要Comparable方法,由于子类child并没有重新实现此接口而虽然...,但是由于类型擦除导致父和子类继承了同一个接口,也就是说子类两次继承了同一个接口类型,这在java是不允许的。      ...最后我们看看泛型的数组问题,如果我告诉你泛型是不能创建数组的,你能想到原因么?下面我们就从为什么泛型不能创建数组来看看泛型的一些细节问题。      首先我们先假设泛型是可以创建数组的。

889100

(18) 为什么说继承是把双刃剑 计算机程序的思维逻辑

子类继承父的时候,往往不得不关注父实现细节,而父修改其内部实现的时候,如果不考虑子类,也往往会影响到子类。 我们通过一些例子来说明。这些例子主要用于演示,可以基本忽略其实际意义。...封装是如何被破坏的 我们来看一个简单的例子,这是基代码: ? Base提供了两个方法add和addAll,将输入数字添加到内部数组。...还是以上面的例子,我们先将addAll方法改回去,这次,我们Base添加一个方法clear,这个方法的作用是将所有添加的数字清空,代码如下: public void clear(){ for...基、子类都是我们写的。 第一种场景,基主要是Java API,其他框架或,在这种情况下,我们主要通过扩展实现自定义行为,这种情况下需要注意的是: 重写方法不要改变预期的行为。...第二种场景我们写基给别人用,在这种情况下,需要注意的是: 使用继承反映真正的"is-a"关系,只将真正公共的部分放到基。 对希望被重写的公开方法添加final修饰符。

1.1K60

有意思,发现Kotlin一个神奇的bug!

}]", type) 以上写法,是Java的语法翻译过来的,它有一个缺点,那就是泛型的传递必须要通过另一个实现,上面我们借助TypeToken,相信这一点,很多人都不能接受,于是乎,Kotlin...null } } 可以看到,我们方法前加上了inline关键字,表明这是一个内联函数;接着泛型T前面加上reified关键字,并把方法里不需要的Type参数去掉;最后我们通过T::class.java...("""[{"name": "张三"},{"name": "李四"}]""") print("") } 注:base module里的Json.kt文件没有这个方法 上面代码,...同样的代码,只是所在module不一样,执行结果也不一样,你说神神奇? 4、一探究竟 知道bug了,也知道了bug的神奇之处,接下来就去探索下,为什么会这样?从哪入手?...至于为什么依赖本module的方法,遇到泛型T与具体相结合时,泛型T会被擦除问题,这个就需要Kotlin官网来解答了,有知道原因的小伙伴,可以评论区留言。

88420

JavaSE语法

面向对象第三个特性便是多态,多态是配合继承来说的,继承实现了代码复用,多态复用的基础上定义子类可以重写父的方法,使程序更加灵活可扩展。我一直没有意识到面向对象这个问题,直到我知道了面向过程。...封装:通过隐藏实现,暴露接口,降低代码的耦合度,使协同开发的复杂度降低 继承与多态:继承的作用是实现代码的复用,而多态复用的基础上定义子类可以重写父的方法,使得程度灵活可扩展 这部分修改过好几次...软件开发的范畴内,除了编写代码上运用了面向对象的思想,使用第三方框架等同样是面向对象的延伸,从底层的操作系统,JVM虚拟机,包括Java语言,我们并不需要重新再发明一遍,站在巨人的肩膀上,我们能做的事更多...,父的方法可以被这100个使用,相比于子类逐个定义,定义具有更好的代码复用性] Father是父,Son继承自Father。...(为什么直接new一个子类对象???)

77610

kotlin入门之泛型

Java的泛型类型会在编译时发生类型擦除,为了保证类型安全,不允许这样赋值、 至于什么是类型擦除,等下再讲。 实际使用我们的确会用这种类似的需求,需要实现上面这种赋值。...Java也已经想到了,所以为我们提供了泛型通配符 ? exntends与? super 来解决这个问题 正确认识Java泛型? exntends与? super ?...说完了Java的泛型之后,我们回头看一下kotlin的泛型。 kotlin 的out和in kotlin和java泛型一样,kotlin的泛型本身也是不可变的。...>兼容Producer 存在逆变点的的泛型参数必须声明为协变或者不变 当泛型作为泛型参数实例的消费者时用协变 *号 *号 前面讲到了 Java 单个?...实际上,我们可以声明一个inline函数,使其类型实参不被擦除,但是这在Java是不行的。

1.1K20

25行代码实现完整的RSA算法

Java语言需要用到BigInteger,数值的计算都是用方法调用,所以使用起来比较麻烦。...计算d可以利用扩展欧几里的算法进行计算,非常简单,超过5行代码就搞定。     5、销毁 p、q。密文 = 明文 ^ e mod n , 明文 = 密文 ^ d mod n。...这个时候很多同学就不干了,说为什么我在网上看到的很多RSA理论都特别多,都分很多个章节,每个章节,都有好多个屏幕才能显示完,这么多的理论,想想怎么也得上千行代码才能实现,怎么到了你这里25行就搞定了呢...北门大官人你不会是糊弄我们把?...咱是实在博主,绝对不会弄虚作假,p和q的选择上,今年过年选p、q,要选就选1024位。

36020

(36) 泛型 () - 解析通配符 计算机程序的思维逻辑

上节我们介绍了泛型的基本概念和原理,本节继续讨论泛型,主要讨论泛型的通配符概念。通配符有着令人费解和混淆的语法,但通配符大量应用于Java容器,它到底是什么?本节,让我们逐步来解析。...它们用的地方不一样,我们解释一下: 用于定义类型参数,它声明了一个类型参数T,可放在泛型定义名后面、泛型方法返回值前面。 ,称之为无限定通配符,我们来看个使用的例子,DynamicArray查找指定元素,代码如下: public static int indexOf(DynamicArray<?...为什么匹配呢?...Java容器实现,有很多这种用法,比如说,Collections中就有如下一些方法: public static <T extends Comparable<?

65180

Java8:接口里面可以写实现方法吗【可以】 、接口可以多继承吗【可以】

上面也说了,Java 8 开始是可以有方法实现的,可以接口中添加默认方法和静态方法。 默认方法用 default 修饰,只能用在接口中,静态方法用 static 修饰,这个我们陌生了。...接口中写实现方法一点也稀奇,像这样的用法,从 Java 8 到 Java 14 已是遍地开花,到处都可以看到接口默认方法和静态方法的身影。...比如我们来看下在 JDK API java.util.Map 关于接口默认方法和静态方法的应用。... Java 8 之前,比如要在一个接口中添加一个抽象方法,那所有的接口实现都要去实现这个方法,不然就会编译错误,而某些实现根本就不需要实现这个方法也被迫要写一个空实现,改动会非常大。...▌为什么要有接口静态方法? 接口静态方法和默认方法类似,只是接口静态方法不可以被接口实现重写。 接口静态方法只可以直接通过静态方法所在的 接口名.静态方法名 来调用。

1.4K10

Kotlin-Android的另一番风味

"菜"的安全系数提高,此Code来自官方文档 特色风味二,鲜 扩展函数,味道鲜美,百吃不厌 项目工具的另一种写法 fun String.toIntSafely(defaultValue: Int =...这就为什么你看Kotlin的Java扩展库很多都是通过扩展函数来封装 方法的归属更好理解,以上述的"toIntSafely"为例,String.toIntSafely,使得开发者更容易直观感受到这个函数是用于...String,不像StringUtil.stringToInt没有归属可言,纯粹就是一个工具函数,不如Kotlin的写法容易理解 对定义函数者的要求高了,正因体现了函数的归属,也就使得开发者定义函数的时候需要考虑归属给哪个还是顶层函数这些问题...,归属的范围少了,会导致不好用,范围广了又怕暴露导致滥用或者误用 特色风味三,香 重载(Overload),回味无穷 虽然这个概念在面向对象领域用得很多,但Kotlin这个重载的味道真是令我们吃上瘾 重载工具的场景用得非常多...,一个项目下来没工具也是不可能,例如我们项目中会封装一些对话框(Dialog)工具供开发的同学一句调用 开发的同学需要在界面显示一个Dialog,只想改变Dialog的内容,那么Java里面就有showDialog

10K60

Java8:接口里面可以写实现方法吗?【可以】接口可以多继承吗?【可以】

然后他还是仔细再想了一下,最后还是斩钉截铁的告诉面试官:接口里面只能写抽象方法,不能写实现方法。 问 接口里面是可以写实现方法的,Java 8 开始就可以了,你用过 Java 8 吗?...上面也说了,Java 8 开始是可以有方法实现的,可以接口中添加默认方法和静态方法。 默认方法用 default 修饰,只能用在接口中,静态方法用 static 修饰,这个我们陌生了。...接口中写实现方法一点也稀奇,像这样的用法,从 Java 8 到 Java 14 已是遍地开花,到处都可以看到接口默认方法和静态方法的身影。...比如我们来看下在 JDK API java.util.Map 关于接口默认方法和静态方法的应用。... Java 8 之前,比如要在一个接口中添加一个抽象方法,那所有的接口实现都要去实现这个方法,不然就会编译错误,而某些实现根本就不需要实现这个方法也被迫要写一个空实现,改动会非常大。

2.6K30

JVM自定义加载器代码扩展性的实践

4.2 扩展加载器 这个加载器是sun.misc.Launcher$ExtClassLoader Java代码的形式实现的。...根据“扩展加载器”这个名称,就可以推断出这是一种Java系统库的扩展机制,JDK的开发团队允许用户将具有通用性的库放置ext目录里以扩展Java SE的功能,JDK9之后,这种扩展机制被模块化带来的天然的扩展能力所取代...由于扩展加载器是由Java代码实现的,开发者可以直接在程序中使用扩展加载器来加载Class文件。...,希望其他的用自定义加载器加载,通过对ClassLoader#loadClass方法分析,那么我们就希望能否通过其父加载器加载到Base64这个三方。...为什么Tomcat需要在JVM基础之上做一套加载结构,主要是为了解决如下问题: 部署同一个服务器上的两个web应用程序所使用的Java库可以实现相互隔离; 部署同一个服务器上的两个web应用程序所使用的

33130

JAVA基础(38) java四大特性理解(封装、继承、多态、抽象)

封装是一种信息隐藏技术,java通过关键字private实现封装。什么是封装?...当成员变量同名时用super区分父。    ...的构造方法的特点:    子类构造对象时,发现,访问子类构造函数时,父也运行了。 原因:    子类构造方法的第一行有一个默认的隐士语句。...3、Java使用extends作为继承的关键字,extends关键字英文是扩展的意思,而不是继承。为什么国内把extends翻译成继承呢?      ...除了与历史原因有关外,把extends翻译成为继承也是有其道理的:子类扩展,将可以获得父的全部属性和方法,这与汉语得继承(辈从父辈那里获得一笔财富成为继承)具有很好的类似性。

1.6K20

Java 8 有多牛逼?打破一切你对接口的认知!

然后他还是仔细再想了一下,最后还是斩钉截铁的告诉我:接口里面只能写抽象方法,不能写实现方法。 栈长:接口里面是可以写实现方法的,Java 8 开始就可以了,你用过 Java 8 吗?...上面也说了,Java 8 开始是可以有方法实现的,可以接口中添加默认方法和静态方法。 默认方法用 default 修饰,只能用在接口中,静态方法用 static 修饰,这个我们陌生了。...接口中写实现方法一点也稀奇,像这样的用法,从 Java 8 到 Java 14 已是遍地开花,到处都可以看到接口默认方法和静态方法的身影。...比如我们来看下在 JDK API java.util.Map 关于接口默认方法和静态方法的应用。... Java 8 之前,比如要在一个接口中添加一个抽象方法,那所有的接口实现都要去实现这个方法,不然就会编译错误,而某些实现根本就不需要实现这个方法也被迫要写一个空实现,改动会非常大。

40631

Android 高级自定义Toast及源码解析

仅仅一个单例,既实现了产品狗的需求,又不会有单元测试快速点击50次的之后不显示的问题。为什么?Read The Fucking Source Code。...接下来只有一个show()方法,似乎我们的源码解析到这里就快结束了。,这只是个开始 ? 这里有三个问题。 通过getService()怎么就获得一个INotificationManager对象?...TN是个什么鬼? Toast#makeText()第一行就获取了一个Toast对象 ?...那么同一个应用程序瞬时mToastQueue存在的消息不能超过50条(Toast对象不能超过50个)。否则直接return。这也是上文中为什么快速点击50次之后无法继续显示的原因。...注意下这里直接使用new Handler获取Handler对象,这也是为什么线程不用Looper弹出Toast会出错的原因。跟进handleShow()。 ?

2.1K70

关于泛型,你可能不知道的事儿

你可以相像一下,当一个泛型被创建时,内部自动扩展成下面的代码。...Sub 是 Base 的子类,代表 List 和 List 有继承关系。...但是,现实编码,确实有这样的需求,希望泛型能够处理某一范围内的数据类型,比如某个和它的子类,对此 Java 引入了通配符这个概念。 所以,通配符的出现是为了指定泛型的类型范围。...这是因为,泛型信息只存在于代码编译阶段,进入 JVM 之前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。 通俗地讲,泛型和普通 java 虚拟机内是没有什么特别的地方。...我们现在可以下结论了,泛型被类型擦除的时候,之前泛型的类型参数部分如果没有指定上限,如 则会被转译成普通的 Object 类型,如果指定了上限如

1.3K10

三万字盘点SpringBoot的那些常用扩展

Spring对于每个Java后端程序员来说肯定陌生,日常开发和面试必备的。...FactoryBean开源框架的使用 1、 Mybatis的使用 Mybatis整合Spring的时候,就是通过FactoryBean来实现的,这也就是为什么Spring的Bean可以注入...的确,我这个例子比较简单,拿到就是遍历,但是Spring,如果Spring加载的话使用SPI机制,那我们就可以扩展,接着往下看。...onApplicationEvent方法,但是onApplicationEvent方法实现又是当ApplicationEvent是ContextRefreshedEvent类型才会往下走,那为什么直接监听...但一般我们直接实现 NamespaceHandler 接口,我们可以继承 NamespaceHandlerSupport ,这个实现了 NamespaceHandler 接口。

1.2K20

揭开Java 泛型类型擦除神秘面纱

你可以相像一下,当一个泛型被创建时,内部自动扩展成下面的代码。...Sub 是 Base 的子类,代表 List 和 List 有继承关系。...但是,现实编码,确实有这样的需求,希望泛型能够处理某一范围内的数据类型,比如某个和它的子类,对此 Java 引入了通配符这个概念。 所以,通配符的出现是为了指定泛型的类型范围。...这是因为,泛型信息只存在于代码编译阶段,进入 JVM 之前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。 通俗地讲,泛型和普通 java 虚拟机内是没有什么特别的地方。...我们现在可以下结论了,泛型被类型擦除的时候,之前泛型的类型参数部分如果没有指定上限,如 则会被转译成普通的 Object 类型,如果指定了上限如

1.1K10
领券