内部类和 外部类相互访问

内部类:

①静态内部类中可以有非静态的方法

②当内部类中有静态方法或者静态成员变量时,一定是静态内部类

1、外部类访问内部类:

   内部类被static修饰:可以直接new

    Inner in = new Inner();

   内部类没有被static修饰:得先new出来外部类的实例,再new内部类的

    Inner in = new Outer().new Inner();

2、内部类访问外部类:(外部类.this.变量)

3、外部类和内部类中的方法相互访问:

①外部类的静态方法test和非静态内部类的非静态方法voice的相互访问:

   test访问voice       先new外类再new内类,再调方法

  

public class Outerclass {
    class Inner{
        public void voice(){
            System.out.println("voice()");
        }
    }
    public static void test(){
        new Outerclass().new Inner().voice();
    }
    public static void main(String[] args) {
      //主函数调用test方法
       test();13     }
}

  voice访问test        外类.this.方法(持有的外部类的引用)

public class Outerclass {
    class Inner{
        public void voice(){
            Outerclass.this.test();
        }
    }
    public static void test(){
        System.out.println("test()");
    }
    public static void main(String[] args) {
    //主函数调用voice()
        Inner in = new Outerclass().new Inner();
        in.voice();
    }
}

②外部类的非静态方法test和静态内部类中的非静态方法voice之间的相互调用

  voic访问test

public class Outerclass {
    static class Inner{
        public void voice(){
            new Outerclass().test();
        }
    }
    public void test(){
        System.out.println("test()");
    }
    public static void main(String[] args) {
    //主函数调用voice()方法
        new Outerclass.Inner().voice();
    }
}

  test访问voice

public class Outerclass {
    static class Inner{
        public void voice(){
            System.out.println("voice()");
        }
    }
    public void test(){
      //1、其他类访问外部类中的静态内部类的非静态方法
       // new Outerclass.Inner().voice();
      //2、此处的Outerclass中的test方法访问静态内部类中的非静态方法
       new Inner().voice();
    }
    public static void main(String[] args) {
      //主函数调用test方法
        new Outerclass().test();
    }
}

转自:https://www.cnblogs.com/rgever/p/8902758.html

原文地址:https://www.cnblogs.com/51python/p/11483134.html

时间: 2024-11-04 04:07:51

内部类和 外部类相互访问的相关文章

内部类和外部类的访问细节

public class Outer{ private int outProp=5; class Inner{ public void accessOuterProp(){ //非静态内部类可以直接访问外部类的成员 System.out.println("外部类的outProp值:"+outProp); } } public void accessInnerProp(){ //外部类不嫩直接访问非静态内部类的实例Field //下面代码出现编译错误 //System.out.print

java:内部类与外部类的区别和联系

注意事项一:在内部类中可以随意使用外部类的成员方法以及成员变量. 众所周知,在定义成员方法或者成员变量的时候,可以给其加上一些权限的修饰词,以防止其他类的访问.如在成员变量或者成员方法前面,加上Private 关键字,则其他类就无法调用这个类中的成员方法或则和成员变量.但是,如果这个类有成员内部类,则不受这方面的限制.也就是说,在成员内部类中可以随意引 用外部类的成员方法以及成员变量,即使这些类成员方法或者成员变量被修饰了private.如在成员外部类中定义了一个i变量,并且利用private关

内部类和外部类之间的相互调用

内部类: ①静态内部类中可以有非静态的方法 ②当内部类中有静态方法或者静态成员变量时,一定是静态内部类 一般内部类在外部类的成员变量位置,像这样: 1 public class Outer { 2 class Inner{ 3 4 } 5 } 1.外部类访问内部类: 内部类被static修饰:可以直接new Inner in = new Inner(); 内部类没有被static修饰:得先new出来外部类的实例,再new内部类的 Inner in = new Outer().new Inner(

震惊!外部类可以访问内部类private变量

在讲Singleton时我举例时用过这样一段代码: public class SingletonDemo { private static class SingletonHolder{ private static SingletonDemo instance=new SingletonDemo(); } private SingletonDemo(){ System.out.println("Singleton has loaded"); } public static Single

Java内部类与外部类的那些事

昨天去笔试的时候遇到了Java的内部类的创建方式与访问权限的问题,我不懂,没写,故今天起来特意去试验一下,就有了这篇总结性的文章. Java中的内部类又分为非静态内部类(匿名内部类也是非静态的内部类)和静态内部类,两者与外部类的关系是不一样的,创建的方式也不一样. 1 非静态内部类 Java的非静态内部类在构造的时候,会将外部类的引用传递进来,并且作为内部类的一个属性,因此,内部类会隐式地持有其外部类的引用.也就是非静态内部类在构造的时候需要有一个外部类的实例传递进来进行构造,不能像普通的Jav

内部类修改外部类属性(转:http://demojava.iteye.com/blog/1075571)

public class Test {  public String demo="qw4rqwer";  public void changValue() {  this.demo=" hello word"; } class DemoOuterclass {   public  DemoOuterclass()   {    changValue();   } } public static void main(String[] args) {  Test t=n

c++内部类和外部类(java)

(1)简介: 内部类其实就是一种在类声明里面定义的一种局部数据类型.(非常类似于struct Node声明的),这和java的还有存在区别的. ---- 内部类的声明有public和private之分 如果声明为public,那么外面也可以用它来定义变量,比如Outer::Inner var 如果声明为private,那么外面不能用来定义变量,那么Outer::Inner var将会导致编译错误. (2)---- 内部类声明完之后就可以用来定义变量 这就和别的数据类型定义变量一样了,访问规则也一

java内部类和外部类

1.使用static可以声明一个内部类, 可以直接在外部调用 class Outer{ // 定义外部类 private static String info = "hello world" ; // 定义外部类的私有属性 static class Inner{ // 使用static定义内部类为外部类 public void print(){ // 定义内部类的方法 System.out.println(info) ; // 直接访问外部类的私有属性 } }; public void

内部类和外部类的实例变量可以共存

成员内部类:作为外部类的一个成员存在,与外部类的属性.方法并列. 内部类和外部类的实例变量可以共存. 在内部类中访问实例变量:this.属性 在内部类访问外部类的实例变量:外部类名.this.属性. 成员内部类的优点: ⑴内部类作为外部类的成员,可以访问外部类的私有成员或属性.(即使将外部类声明为PRIVATE,但是对于处于其内部的内部类还是可见的.) ⑵用内部类定义在外部类中不可访问的属性.这样就在外部类中实现了比外部类的private还要小的访问权限. 注意:内部类是一个编译时的概念,一旦编