当前位置: 首页 > 知识库问答 >
问题:

在java中继承InnerClass

斜光耀
2023-03-14
public class InnerClass {
    class Inner
    {
        public void method()
        {
            System.out.println("Innerclass");
        }
    }
}

class Sample extends InnerClass.Inner
{
    public static void main(String [] arg)
    {
        Sample s = new Sample(new InnerClass());
        s.method();

    }

//为什么这是强制性的???

    Sample(InnerClass i) {
        i.super();
    }

    @Override
    public void method() {
        System.out.println("derived class");
    }
}

当我做一个类派生从一个innerclass(Innerclass.后来我才知道,它需要包括一个构造函数采取封闭类引用为什么是这样?

共有2个答案

蔺敏达
2023-03-14

因为非静态内部类有一个隐式成员,该成员指向它们的外部类,如果不给内部类一个指针,就不能创建内部类的实例。如果直接创建内部类的实例,则必须使用newouter。内部()。但Sample不是一个内部类,它只是继承了一个,所以外部实例必须在其构造函数中传递给基构造函数。因此,它需要有一些外部可用的实例,或者自己创建它。

郎嘉树
2023-03-14

Java中的非静态内部类具有对封闭实例的隐式引用。您可以通过以下方式解决您的问题:

public class InnerClass {
    static class Inner // can make it public too
    {
        public void method()
        {
             System.out.println("Innerclass");
        }
    }
}

只是不要期望在没有特定实例的情况下能够调用InnerClass上的任何方法。

 类似资料:
  • 问题内容: 假设Java具有以下层次结构类: 这是C#中相同代码的(盲)重复: 当我执行Java代码时,我得到了C#返回的信息。 对我来说,C#的结果更有意义,因为引用B调用了它自己的方法。 Java设计者决定打印而不是打印的逻辑是什么?我的意思是,为什么引用B在C中使用覆盖方法?这种方法的优势是什么? 如何更改Java代码以像C#一样打印出来?我的意思是,我怎么教Java调用它使用的完全引用的方

  • 本小节我们将学习 Java 的继承,通过本小节的学习,你将知道什么是继承,继承有什么特点,如何实现继承,方法重写的概念和实现,方法重写和方法重载是比较容易混淆的概念,我们也会介绍两个概念的区别,这些都是本小节的重点,本小节的最后我们还会介绍 super 关键字以及 final 关键字。 1. 概念和特点 1.1 概念 继承是面向对象软件技术当中的一个概念。如果一个类别 B “继承自” 另一个类别

  • 问题内容: 我有超类和方法。如果我在继承的子类中重写了方法,或者必须始终编写它,是否会继承? 问题答案: 不,您将总是不得不写信。如果您调用超类的同步方法,则这当然是同步调用。不是方法签名的一部分。 有关Java线程负责人(等等)的Doug Lea的详细说明,请参见http://gee.cs.oswego.edu/dl/cpj/mechanics.html。

  • 我一直在做一个基本的类继承练习,尽管我认为我已经掌握了它的jist,但我的程序并没有按应有的方式工作。我遇到了编译错误,但还没有弄清楚原因——如果你们都能在这里帮助我,那就太好了。 首先,这里有三个文件1。人java——基类2。大学生java——一个派生的Person类。java 3。家庭java——不太确定,我认为它是自己的基类 人java有两个实例变量,String name和int age,

  • 问题内容: 问题的简短摘要:我有一个父类,并由子类扩展。 该子类使用super调用Parent的构造函数: 我想知道是否可以在Grandchild类的构造函数中调用super()方法来扩展Child类: 问题答案: super()在继承上一级调用构造函数,如果存在无参数的构造函数,则将隐式调用该构造函数。 对象是从继承的最高层初始化的,在您的情况下是对象>父>子>孙。 从文档中:

  • 问题内容: 我有一个Java类,它会触发自定义Java事件。该代码的结构如下: 一切正常,但是我想创建一个新的A类(称为B),这可能会引发一个新事件。我正在考虑以下修改: 这是正确的方法吗?我在网上搜索示例,但找不到任何示例。 在此解决方案中,有几件事我我不喜欢: 有两种方法,一种使用另一种方法作为参数。 类都具有和方法。是否应该使用private关键字隐藏addAListener? [更新:无法