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

为什么是super.super.method(); Java不允许?

在Java中,super.super.method() 是不允许的,因为它违反了Java的语言规范。在Java中,我们使用super关键字来调用父类的构造方法或方法,但是我们不能使用super关键字来调用父类的父类的方法。

如果你需要调用父类的父类的方法,你可以考虑使用接口和组合来实现。在这种情况下,你可以创建一个接口,该接口包含你想要调用的方法,然后在你的类中实现该接口。这样,你可以在你的类中调用该方法,而不需要使用super.super.method()

例如,假设你有一个类GrandParent,它有一个方法method(),你想要在一个子类中调用这个方法。你可以这样做:

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

public class Parent implements MyInterface {
    public void method() {
        // Parent class implementation
    }
}

public class Child extends Parent {
    public void method() {
        // Child class implementation
    }

    public void callGrandParentMethod() {
        ((MyInterface)this).method();
    }
}

在这个例子中,我们创建了一个名为MyInterface的接口,它包含一个名为method()的方法。然后,我们创建了一个名为Parent的类,它实现了MyInterface接口,并提供了method()的实现。最后,我们创建了一个名为Child的类,它继承了Parent类,并提供了自己的method()实现。我们还在Child类中添加了一个名为callGrandParentMethod()的方法,该方法调用了MyInterface接口中的method()方法,这实际上是调用了GrandParent类中的method()方法。

这种方法允许你在不使用super.super.method()的情况下调用父类的父类的方法。

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

相关·内容

为什么不允许使用 Java 静态构造函数?

不允许使用 Java 静态构造函数,但是为什么呢?在深入探讨不允许使用静态构造函数的原因之前,让我们看看如果要使 构造函数静态化 会发生什么。...由于构造函数不是类属性,因此有理由认为它不能静态的。 静态块 / 方法无法访问非静态变量 我们知道静态方法不能访问非静态变量。静态块也是如此。 现在,构造函数的主要目的初始化对象变量。...因此,使构造函数为非静态合理的。 注意,我们不能this在静态方法中使用引用对象变量。下面的代码将定义编译错误,因为:不能在静态上方中使用它。...count is class variable //and shared among all the objects of the class count=c; } } 总结 我们说明了为什么不允许使用...Java静态构造函数。

3.1K80

java线程池,阿里为什么不允许使用Executors?

带着问题 阿里Java代码规范为什么不允许使用Executors快速创建线程池? 下面的代码输出是什么?...线程池可以通过池看出来一个资源集,任何池的作用都大同小异,主要是用来减少资源创建、初始化的系统开销。 创建线程很“贵”吗? 是的。创建线程的代价昂贵的。...Java中的线程池 UML图(Java 8 image.png 可以看到真正的实现类有 ThreadPoolExecutor (1.5) ForkJoinPool (1.7) ScheduledThreadPoolExecutor...由于java对于协程的支持不友好,所以会大量依赖于线程池和线程。 从而这个值没有最优推荐,需要根据业务需求情况来进行设置。 不同的需求类型可以创建多个不同的线程池来执行。...问题1:阿里开发规范为什么不允许Executors快速创建线程池?

1.1K20
  • 为什么ConcurrentHashMap不允许插入null值?

    Java 语言中,ConcurrentHashMap 和 Hashtable 这些线程安全的集合不允许 key 或 value 插入 null 值的,而 HashMap 又允许 key 或 value...插入 null 值,这到底为什么呢?...然而,这个原因不能说服面试官的,虽然源码这样设计的,但我们要思考的,这样设计背后更深层次的原因,为什么 ConcurrentHashMap 不允许插入 null?...可以看出这就是 ConcurrentHashMap 的二义性问题,那为什么 HashMap 就不怕二义性问题呢? 可证伪的 HashMap 上面说到 HashMap 不怕二义性问题的,为什么呢?...总结 在 Java 语言中,HashMap 这种单线程下使用的集合可以设置 null 值的,而并发集合如 ConcurrentHashMap 或 Hashtable 不允许给 key 或 value

    1.8K30

    RPC接口不允许使用枚举类型。为什么

    RPC简介 RPCRemote Procedure Call的缩写。中文名:远程服务调用。简单来说就是一个节点提供服务(称为服务端),一个节点消费服务(客户端)。...RPC通信方式 PRC的服务端和客户端之间的通信协议TCP/IP。但是,你肯定会有疑惑,服务端提供的服务中类定义,客户端怎么知道的呢? 答案就是序列化和反序列化。...at com.pinfine.test.Test01.lambda$main$0(Test01.java:26) at java.util.ArrayList$ArrayListSpliterator.forEachRemaining...(ArrayList.java:1380) at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)...at com.pinfine.test.Test01.main(Test01.java:26) 复制代码 从报错信息可以看出,出现了空指针。

    98000

    为什么线程池不允许使用Executors去创建?

    为什么线程池不允许使用Executors去创建? Executors Executors 一个Java中的工具类。提供工厂方法来创建不同类型的线程池。...多数情况下可用来替代Timer类 ScheduledExecutorService executor4 = Executors.newScheduledThreadPool(8); 这个类整体来说使用起来比较方便,但是为什么说不建议用...Executors为什么会OOM 通过上面的报错信息可以看出,其中真正导致OOM的LinkedBlockingQueue.offer(E e),查看Executors.newFixedThreadPool...(int nThreads)的源码,看到阻塞队列用的new LinkedBlockingQueue(); Java中的 BlockingQueue主要有两种实现,分别是ArrayBlockingQueue...ArrayBlockingQueue一个用数组实现的有界阻塞队列,必须设置容量。

    11010

    为什么foreach中不允许对元素进行add和remove

    阿粉的读者遇到了一个比较经典的面试题,也就是标题上说的,为什么 foreach 中不允许对元素进行 add 和 remove。...阿粉就这个问题深入分析一下为什么不让使用 add 和 remove,并且实际运行一下,我们来看一下。...(ArrayList.java:911) at java.util.ArrayList$Itr.next(ArrayList.java:861) 这时候就有人说,你为啥不直接用 iterator 迭代器遍历呢...其实说这话的,一般都是没去看过源码的,为什么这么说,如果你要是反编译出来 foreach 这一段代码,那么你肯定发现内部使用迭代器实现的,既然这样,那好,我们再用迭代器遍历一下试试。...为什么不相等的时候,就会出现异常呢?

    46110

    为什么说LockSupportJava并发的基石?

    并发组件和并发工具大都是基于AQS来实现的: 队列同步器AbstractQueuedSynchronizer(以下简称同步器),用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态...而AQS中的控制线程又是通过LockSupport类来实现的,因此可以说,LockSupportJava并发基础组件中的基础组件。...中不会存在这个“惊群”问题的,那么Java如何处理的呢?...Java在语言层面实现了自己的线程管理机制(阻塞、唤醒、排队等),每个Thread实例都有一个独立的pthread_u和pthread_cond(系统层面的/C语言层面),在Java语言层面上对单个线程进行独立唤醒操作...(怎么感觉Java中线程有点小可怜呢,只能在Java线程库的指挥下作战,竟然无法直接获取同一个pthread_mutex或者pthread_cond。

    35420

    java的动态代理机制详解_java为什么静态语言

    说起java动态代理,在我刚开始学java时对这项技术也是十分困惑,明明可以直接调通的对象方法为什么还要使用动态代理?随着学习的不断深入和工作经验的积累,慢慢的体会并理解了java动态代理机制。...(1)什么代理? 大道理上讲代理一种软件设计模式,目的地希望能做到代码重用。具体上讲,代理这种设计模式通过不直接访问被代理对象的方式,而访问被代理对象的方法。...(4)静态代理 我们先创建一个接口,遗憾的java api代理机制求被代理类必须要实现某个接口,对于静态代理方式代理类也要实现和被代理类相同的接口;对于动态代理代理类则不需要显示的实现被代理类所实现的接口...,没有什么问题只不过在代理类中引入了被代理类的对象而已。...(6)反编译Proxy.newProxyInstance所创建的代理类 //这一句生成代理类的class文件,前提你需要在工程根目录下创建com/sun/proxy目录,不然会报找不到路径的io异常

    29820

    Java 中的 String 为什么不可变的?

    什么不可变对象? 众所周知, 在Java中, String类不可变的。那么到底什么不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。...区分对象和对象的引用 对于Java初学者, 对于String不可变对象总是存有疑惑。...其实,Java中的引用和C++中的指针在概念上相似的,他们都是存放的对象在内存中的地址值,只是在Java中,引用丧失了部分灵活性,比如Java中的引用不能像C++中的指针那样进行加减运算。...这也是为什么像replace, substring,toLowerCase等方法都存在返回值的原因。...下面实例代码: /** * Java学习交流QQ群:589809992 我们一起学Java

    1.8K01

    为什么String在Java不可变的

    String 在 Java不可变的。 不可变类只是一个无法修改其实例的类。 创建实例时,将初始化实例中的所有信息,并且无法修改信息。 不可变类有许多优点。...本文总结了为什么 String 设计为不可变的。 这篇文章从内存,同步和数据结构的角度说明了不变性概念。 1. 字符串池 字符串池(String intern pool)方法区域中的特殊存储区域。...如果字符串可变的,则使用一个引用更改字符串将导致其他引用的错误。 2. 缓存的哈希码 字符串的哈希码经常在 Java 中使用。 例如,在 HashMap 或 HashSet 中。...安全 String 被广泛用作许多 java 类的参数,例如 网络连接,打开文件等。字符串不是不可变的,连接或文件将被更改,这可能会导致严重的安全威胁。 该方法认为它连接到一台机器,但事实并非如此。...可变字符串也可能在 Reflection 中引起安全问题,因为参数字符串。 如下例子: boolean connect(string s){ if (!

    1.3K20

    为什么Java字符串不可变对象?

    本文主要来介绍一下Java中的不可变对象,以及Java中String类的不可变性,那么为什么Java的String类不可变对象?让我们一起来分析一下。...答案一: 最流行的Java面试题之一就是:什么不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable...在Java中将String设计成不可变的综合考虑到各种因素的结果,想要理解这个问题,需要综合内存,同步,数据结构以及安全等方面的考虑. 在下文中,我将为各种原因做一个小结。 1....事实上,这也是Java面试中的许多 “为什么” 的答案。 答案三:String类不可变性的好处 String所有语言中最常用的一个类。我们知道在Java中,String不可变的、final的。...Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类。 String类不可变性的好处 1.只有当字符串不可变的,字符串池才有可能实现。

    53520

    Java中的String为什么不可变的?

    什么不可变对象? 众所周知, 在Java中, String类不可变的。那么到底什么不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。...区分对象和对象的引用 对于Java初学者, 对于String不可变对象总是存有疑惑。...Java和C++的一个不同点, 在Java中不可能直接操作对象本身,所有的对象都由一个引用指向,必须通过这个引用才能访问对象本身,包括获取成员变量的值,改变对象的成员变量,调用对象的方法等。...其实,Java中的引用和C++中的指针在概念上相似的,他们都是存放的对象在内存中的地址值,只是在Java中,引用丧失了部分灵活性,比如Java中的引用不能像C++中的指针那样进行加减运算。...这也是为什么像replace, substring,toLowerCase等方法都存在返回值的原因。

    69630

    为什么Java里面String类不可变的

    Java里面String类型不可变对象,这一点毫无疑问,那么为什么Java语言的设计者要把String类型设计成不可变对象呢?这是一个值得思考的问题。...在Java里面final关键字就是用来辅助创建不可变对象的,但需要注意的,对于基本类型被final修饰后,就彻底变成了不可变对象,而引用类型被final修饰后,仅仅是指针的内存地址不能改变,如果想要变成彻底的不可变类型...ok,下面我们来分析下为什么String不可变的? 通过String源码可以看到,String类型的底层由final修饰的char数组存储。...总结: 本文主要介绍了Java语言里面String类型为什么设计成不可变类型,以及分析了不可变类型的带来的主要优势,需要注意的虽然不可变类型能够带来不少的好处,但并不是说其没有弊端,不可变类型的每一次修改都需要在内存中新生成一个对象...,从另一个方面说针对经常变化的对象是不适合使用不可变类型的,这也是为什么Java里面还提供了可修改值的StringBuilder和StringBuffer类,这在实际开发中常常是需要根据具体情况权衡的。

    72340

    为什么Java字符串不可变对象?

    本文主要来介绍一下Java中的不可变对象,以及Java中String类的不可变性,那么为什么Java的String类不可变对象?让我们一起来分析一下。...答案一: 最流行的Java面试题之一就是:什么不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable...在Java中将String设计成不可变的综合考虑到各种因素的结果,想要理解这个问题,需要综合内存,同步,数据结构以及安全等方面的考虑. 在下文中,我将为各种原因做一个小结。...事实上,这也是Java面试中的许多 “为什么” 的答案。 答案三:String类不可变性的好处 String所有语言中最常用的一个类。我们知道在Java中,String不可变的、final的。...Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类。 String类不可变性的好处 1.只有当字符串不可变的,字符串池才有可能实现。

    66710
    领券