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

来自内部类的Java方法调用与外部类的输出不同

是因为内部类具有访问外部类成员的特殊能力。在Java中,内部类是定义在另一个类内部的类。它可以访问外部类的成员变量和方法,包括私有成员,而外部类不能直接访问内部类的成员。

内部类可以分为静态内部类和非静态内部类。静态内部类与外部类的关系更加独立,可以直接通过外部类名访问,而非静态内部类需要通过外部类的实例来访问。

当内部类的方法被调用时,它可以访问外部类的成员变量和方法,包括私有成员。这是因为内部类持有一个对外部类对象的引用,可以通过该引用访问外部类的成员。

下面是一个示例代码:

代码语言:java
复制
public class OuterClass {
    private int outerVariable = 10;

    public void outerMethod() {
        InnerClass inner = new InnerClass();
        inner.innerMethod();
    }

    public class InnerClass {
        public void innerMethod() {
            System.out.println("内部类方法调用:outerVariable = " + outerVariable);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        outer.outerMethod();
    }
}

输出结果为:

代码语言:txt
复制
内部类方法调用:outerVariable = 10

在这个例子中,内部类InnerClass可以访问外部类OuterClass的私有成员变量outerVariable,并将其输出。

对于这个问题,腾讯云提供了一系列与Java开发相关的产品和服务,如云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以根据具体需求和场景来选择。

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

相关·内容

java部类 静态方法调用_内部类和静态内部类调用「建议收藏」

in=new Outside(); //在通过外部类对象创建一个内部类对象 Outside.Indoor oi = in.new Indoor(); //调用部类自己属性和方法 oi.Swim()...; System.out.println(oi.oo); //外部类自己调用部类 in.age=8; System.out.println(in.age); System.out.println(“=...静态内部类不可以调用部类属性和方法 //静态内部类调用自己属性和方法 j.pp=”ajk”; j.Swim(); //在静态内部类中,只能使用外部类名直接调用外部静态属性和方法 Out.age=...void Swim() { System.out.println(“我在水库游泳”); //直接使用自己类中age System.out.println(age); //调用部类age System.out.println...(Out.age); //外部类方法直接调用 run(); } } } 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

1K30

Java部类匿名内部类详解

成员内部类 成员内部类 :定义在类中方法类。 定义格式: class 外部类 { class 内部类{ } } 在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。...调用部类方法 heart.jump(); // 调用部类方法 p.setLive(false); // 调用部类方法...heart.jump(); } } 输出结果: 心脏在跳动 心脏不跳了 内部类仍然是一个独立类,在编译之后会内部类会被编译成独立.class文件,但是前面冠以外部类类名和符号 。...以接口举例,当你使用一个接口时,似乎得做如下几步操作: 定义子类 重写接口中方法 创建子类对象 调用重写后方法 我们目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?...✈️✈️✈️"); } }; //调用 fly方法,执行重写后方法 f.fly(); } } 通常在方法形式参数是接口或者抽象类时

1.5K30
  • Java部类中使用外部类成员方法以及成员变量

    如在成员变量或者成员方法前面,加上Private关键字,则其他类就无法调用这个类中成员方法或则和成员变量。但是,如果这个类有成员内部类,则不受这方面的限制。...如此就可以保证,利用外部类创建对象同时创建了内部类对象。从而可以保证Java部类实例绑定在外部类实例上。  成员内部类中成员方法成员变量私有性。 ...只是不能够进行直接引用,而是要使用内部类对象引用方法才能够调用部类成员变量。这一点程序开发人员需要切记。成员内部类部类相互访问彼此成员方法限制是不同。...由于在内部类中可以随意访问外部类中成员方法成员变量。但是此时成员内部类部类变量名相同,那么如果要在内部类使用这个变量i,编译器怎么知道现在需要调用部类变量i,还是内部类变量i呢? ...从以上总结中可以看出,成员内部类部类之间关系确实很复杂。作为一个Java程序开发人员,必须要了解内部类部类成员相互之间引用准则、内部类对象部类对象关系。

    2.8K10

    在C++中模拟JAVA部类方法

    有时候我们需要把一批互相关联API用不同类提供给用户,以便简化每个类使用难度。但是这样这些类之间数据共享就成了问题。...JAVA部类可以自由访问外围类所有数据,所以很时候做这工作,而如果C++也这样做,就变成要增加很多setter和getter。...但是,也可以用以下方法模拟实现: 首先,你部类头文件一般是被外围类所#include,所以需要在内部类声明前增加“前置声明”: namespace outerspace{ class OuterClass...以上是内部类设定,外部类就很简单,只需要保存内部类指针,然后设置好内部类为友元就可以了: friend InnerClass; private: InnerClass inner_obj; 外部类则需要在初始化过程中设置...在设计API过程中,内部类需要用到外部类任何成员,包括是private,都可以用 outer_obj->XXX直接引用。而外部类则可以直接返回内部类指针(引用)给使用者。

    2K40

    【小家java】静态类、静态方法、内部类、匿名内部类、非静态类一些实践

    但如果这个类是内部类,是可以这样写:public static class A 静态内部类作用:只是为了降低包深度,方便类使用,实现高聚。...除了只能使用一次,其实还有其他用处哦~ 当你想使用一个类protected 方法时,但是目前你类又和他不同包且也不能继承他,这时候匿名类就派上用场了,你可以声明一个匿名类继承该类,并定义一个方法然后调用父类方法即可...3、使用场景 内部类和静态内部类区别 静态类 只能在内部类中定义静态类 静态内部类不依赖于外部类,即使外部类没有创建对象,静态类也可以new对象 静态类方法可以是静态方法也可以是非静态方法,静态方法可以在外层通过静态类调用...可以实现多重继承 可以避免修改接口而实现同一个类中***两种同名方法***调用 java设计旨在简单,所以初学者十分好入门并且上手工作,但作为一门火了这么多年语言,肯定还是有些硬骨头,而这些,...我们会发现java设计者在设计内部类时候用心良苦,学会使用内部类,是掌握java高级编程一部分,它可以让你更优雅设计你程序结构。

    2.9K30

    Java基础】类成员总结(属性,方法,构造器,代码块,内部类

    先声明,后使用 1.3 变量都有其对应作用域 2.不同点: 2.1 在类中声明位置不同 属性:直接定义在类一对{} 局部变量:声明在方法方法形参、代码块、构造器形参、构造器内部变量...静态代码块只能调用静态属性、静态方法,不能调用非静态结构 非静态代码块 内部可以有输出语句 随着对象创建而执行 每创建一个对象,就执行一次非静态代码块 作用:可以在创建对象时,...对对象属性等进行初始化 如果一个类中定义了多个非静态代码块,则按照声明先后顺序执行 非静态代码块可以调用静态属性、静态方法,或非静态属性、非静态 5.内部类Java中,可以将一个类定义在另一个类里面或者一个方法里边...(3)外部类加载时并不需要立即加载内部类部类静态内部类区别 静态内部类相对部类是独立存在,在静态内部类中无法直接访问外部类变量、方法。...在Java中,可以将一个类定义在另一个类里面或者一个方法里边,这样类称为内部类,广泛意义上部类一般包括四种:成员内部类,局部内部类,匿名内部类,静态内部类

    50930

    Java基础入门之Object类、匿名内部类、构造方法继承解析

    前言 大家好,我是Java进阶者。这篇文章我们主要介绍Java基础中Object类、匿名内部类、构造方法继承知识,一起来学习下吧!...从上面代码中,在输出语句中是调用了Fruit对象toString()方法。这个Fruit类是继承Object类,在Object定义了toString()方法输出这个对象信息。...二、匿名内部类 1.什么是匿名内部类 匿名内部类简单来说就是不知道这个类名字。创建匿名内部类,只要调用一次就可以了。...介绍了Object类一些方法,通过Object类例子和重写Object类toString()方法例子帮助理解用法。 匿名内部类简单来说就是不知道这个类名字。创建匿名内部类,只要调用一次就可以了。...一篇文章带你了解Javastatic关键字和静态变量、静态方法 一篇文章带你了解Java设计和封装及类成员访问控制

    56710

    关于Java部类字段和方法不能使用static修饰原因

    昨天文章中,遗留了一个问题就是,为什么Java部类字段和方法不能使用static修饰。...InnerClass { static int i = 100; // compile erro static void f() { } // compile erro } } 上面的内部类成员变量和方法...原因: 简单来说,内部类是外部类实例,部类成员变量是一样,每个实例化出来对象,它成员变量赋值都是独立不会相互影响。...其实归根结底,还是类对象区别,静态属性不依赖于对象,因为它保存在jvm静态区,所以访问修改时候不需要依赖当前有没有存活对象,在虚拟机加载时候也是优先于实例生成。...内部类其实也可以认为是外部类一个成员变量,只要是成员变量,各个对象都是不依赖,静态属性出现破坏了这一逻辑,所以java语言在语义层面不允许我们那么做,这其实不是技术问题,是一个语言逻辑和语义问题

    88070

    关于Java部类字段和方法不能使用static修饰原因

    昨天文章中,遗留了一个问题就是,为什么Java部类字段和方法不能使用static修饰。...InnerClass { static int i = 100; // compile error static void f() { } // compile error } } 上面的内部类成员变量和方法...原因: 简单来说,内部类是外部类实例,部类成员变量是一样,每个实例化出来对象,它成员变量赋值都是独立不会相互影响。...其实归根结底,还是类对象区别,静态属性不依赖于对象,因为它保存在jvm静态区,所以访问修改时候不需要依赖当前有没有存活对象,在虚拟机加载时候也是优先于实例生成。...内部类其实也可以认为是外部类一个成员变量,只要是成员变量,各个对象都是不依赖,静态属性出现破坏了这一逻辑,所以java语言在语义层面不允许我们那么做,这其实不是技术问题,是一个语言逻辑和语义问题

    45440

    Java单例模式不同写法(懒汉式、饿汉式、双检锁、静态内部类、枚举)

    目录 1、饿汉模式 2、懒汉模式 3、双重校验锁【推荐】 4、静态内部类【推荐】 5、枚举 6、单例模式线程安全性 ---- Java中单例(Singleton)模式是一种广泛使用设计模式。...缺点:但是这里懒汉模式并没有考虑线程安全问题,在多个线程可能会并发调用getInstance()方法,导致创建多个实例,因此需要加锁解决线程同步问题,实现如下: 以上代码在单线程下运行是没有问题...synchronized修饰同步方法比一般方法要慢很多,如果多次调用getInstance(),累积性能损耗就比较大了。 因此就有了双重校验锁,先看下它实现代码。...} } 可以看到上面在同步代码块多了一层instance为空判断。...同时每个枚举实例都是static final类型,也就表明只能被实例化一次。在调用构造方法时,我们单例被实例化。

    1.1K30

    java(4)-深入理解java嵌套类、内部类以及内部类builder构建构造函数六、使用 builder 模式解决构造方法参数过多情况

    ,这是由Java语法中"静态方法不能直接访问非静态成员"所限定。...注意,外部类访问内部类成员有些特别,不能直接访问,但可以通过内部类来访问,这是因为静态嵌套所有成员和方法默认为静态了。...3、另外,就是要注意,内部类Inner及InnterTwo只在类Outer作用域是可知,如果类Outer任何代码尝试初始化类Inner或使用它,编译就不会通过。...同时,内部类变量成员只在内部内部可见,若外部类或同层次部类需要访问,需采用示例程序中方法,不可直接访问内部类变量。 四、方法部类  顾名思义,把类放在方法。...但是该方法结束之后, 在方法创建部类对象可能仍然存在于堆中!例如,如果对它引用被传递到其他某些代码,并存储在一个成员变量

    1.6K10

    java中匿名内部类使用(仅限介绍实际使用两种方法)

    使用场景: 匿名内部类可以使你代码更加简洁,你可以在定义一个类同时对其进行实例化。它与局部类很相似,不同是它没有类名,如果某个局部类你只需要用一次,那么你就可以使用匿名内部类。...使用步骤 定义匿名内部类 匿名内部类语法 访问作用域局部变量、定义和访问匿名内部类成员 匿名内部类实例 两种案例类型 实现接口匿名类 匿名子类(继承父类) 运行结果: 运行结果: 匿名内部类访问其外部类方法...动物 布谷鸟 从以上两个实例中可知,匿名类表达式包含以下内部分: 操作符:new; 一个要实现接口或要继承类,案例一中匿名类实现了HellowWorld接口,案例二中匿名内部类继承了Animal...父类; 一对括号,如果是匿名子类,实例化普通类语法类似,如果有构造参数,要带上构造参数;如果是实现一个接口,只需要一对空括号即可; 一段被"{}“括起来类声明主体; 末尾”;"号(因为匿名类声明是一个表达式...,是语句一部分,因此要以分号结尾)。

    48520

    SQL中连接连接--Java学习网

    链接运算由两部分构成:连接类型和连接条件 连接类型可分为: INNER JOIN 连接 LEFT OUTER JOIN 左连接 RIGHT OUTER JOIN 右连接 FULL OUTER...JOIN 全连接 连接条件可分为 NATURAL 自然连接(去掉重复属性) ON 连接条件(保留重复属性) USING 属性名1,属性名2… (保留指定重复属性) 具体组合有以下几种形式...上面的SQL语句中做了等值连接,我们看到tn属性是重复 table1 INNER JOIN table2 USING (公共属性名) SELECT * FROM teacher INNER JOIN...左连接会保留table1中元组在结果集中不丢失,使用ON条件,不去掉重复元组 table1 LEFT JOIN table2 USING (tn) SELECT * FROM teacher LEFT...这个就是自然连接了,自然连接只能用在外连接当中,并且使用自然连接是两个表中公共属性都需要进行等值判断

    1.4K30

    Java方法嵌套递归调用

    本人技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获大家交流一二,希望对学习路上你有所助益。...Java方法嵌套递归调用 本文关键字:方法、嵌套、递归、经典问题 一、方法嵌套 1....方法嵌套 在编程中最常见就是方法方法之间调用嵌套,因为通常情况下,我们解决一个问题不会只靠一个方法。...构造嵌套 在之前文章中已经向大家介绍了构造器重载,可以适用于对不同个数属性进行初始化,直击传送门:Java初始化对象工具 - 构造器。...获得单个数值不同,打印时要求输入是想要显示层数,那么我们就要用到双重for循环来构建出整个图形了: public class Test{ public static void main(

    2.5K31

    Java——扩展概念(匿名内部类、包装类、装箱拆箱、数据类型转换)

    参考链接: Java中自动装箱和扩展方法重载 目录  1、匿名内部类  2、包装类实现原理分析  3、装箱拆箱  4、数据类型转换  5、总结  本文讲解扩展内容,包括:匿名内部类、包装类实现原理分析...1、匿名内部类  匿名内部类,故名思意就是没有名字部类。匿名内部类有什么用?...;        --Number父类中定义拆箱操作方法:xxxValue()方法 【举例】:以Integerint为例          Integer x = new Integer(10);...double temp = y.doubleValue();  所有的装箱拆箱操作基本都是一个路子,以上方法都是在JDK1.5之前使用,JDK1.5后提供了自动装箱拆箱支持:         ...= ""+100;  String temp = String.valueOf(100);  5、总结  1)自动装箱拆箱特点;  2)Number类定义及方法;  3)基本数据类型String

    52410

    Java——扩展概念(匿名内部类、包装类、装箱拆箱、数据类型转换)

    本文讲解扩展内容,包括:匿名内部类、包装类实现原理分析、装箱拆箱、数据类型转换。 1、匿名内部类 匿名内部类,故名思意就是没有名字部类。匿名内部类有什么用?...:将包装类中基本数据类型取出;        --Number父类中定义拆箱操作方法:xxxValue()方法 【举例】:以Integerint为例 Integer x = new...); double temp = y.doubleValue(); 所有的装箱拆箱操作基本都是一个路子,以上方法都是在JDK1.5之前使用,JDK1.5后提供了自动装箱拆箱支持:...任何数据类型使用+ String连接都会转换为String类型,但是这种方法会产生垃圾; 在String中有一组重载valueOf()方法,可以避免垃圾产生,实际开发中都用这种; String temp...= ""+100; String temp = String.valueOf(100); 5、总结 1)自动装箱拆箱特点; 2)Number类定义及方法; 3)基本数据类型String转换

    58330

    如何讲清楚 Java 面向对象问题知识?(类对象,封装,继承,多态,接口,内部类...)

    ,随着对象消失而消失 局部变量:随着方法调用而存在,随着方法调用完毕而消失 D:初始化值不同 成员变量:有默认值(构造方法对它值进行初始化) 局部变量:没有默认值,必须定义,赋值,然后才能使用...所以在Student类中提供一个方法来对数据进行校验但是如果偏偏不调用方法来赋值,还是通过 对象名.变量 直接赋值,这样我们方法逻辑就没有起作用所以我们必须强制要求使用我方法,而不能直接调用成员变量这也正是我们使用...) 2.3 多态 多态是同一个行为具有多个不同表现形式或形态能力,例如:黑白打印机和彩色打印机相同打印行为却有着不同打印效果, 对象类型和引用类型之间存在着继承(类)/ 实现(接口)关系; 当使用多态方式调用方法时...简单理解:即使没有外部类对象,也可以创建静态内部类对象,而外部类非static成员必须依赖于对象调用,静态成员则可以直接使用类调用,不必依赖于外部类对象,所以静态内部类只能访问静态外部属性和方法...Java中,通常就是编写一个接口,然后你来实现这个接口,然后把这个接口一个对象作以参数形式传到另一个程序方法中, 然后通过接口调用方法,匿名内部类就可以很好展现了这一种回调功能 public

    1.2K10
    领券