栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

16.成员内部类【20220624】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

16.成员内部类【20220624】

1.什么是内部类?

将一个java类定义到另一个类的类体中,那么定义在类体中的类就是内部类
我们把包含内部类的java类叫外部类

public  class  Hello{
	public  class  World{

	}
}

Hello---外部类
World---内部类
内部类在编译之后会得到独立的内部类的字节码文件【外部类的类名$内部类的类名.class】

2.内部类的分类?

1.成员内部类
2.方法内部类
3.匿名内部类
4.静态内部类【静态嵌套类】 

3.成员内部类---将内部类定义在另一个类的类体中

public  class  Hello{
    //成员内部类
    public  class  World{

    }
}

1.成员内部类中的元素:实例变量,构造方法,实例方法;不能出现静态元素

package com.wangxing.chengyuan.test1;
public class Hello {
	//成员内部类
	public  class  World{
		public String  worldshili="成员内部类中的实例变量";
		//不能出现静态变量
		//public static String  worldstatic="成员内部类中的静态变量";
		public World(){
			System.out.println("成员内部类中的构造方法");
		}
		public  void  worldShiLiMethod(){
			System.out.println("成员内部类中的实例方法");
		}
		//不能出现静态方法
		//public static  void  worldStaticMethod(){
		//	System.out.println("成员内部类中的静态方法");
		//}
	}
}

2.成员内部类中可以访问成员内部类中的实例变量/实例方法,构造方法
   2.1.对实例变量/实例方法的访问,对象.实例变量/实例方法,this.实例变量/实例方法,对象和this可以省略
   2.2.对构造方法的访问,通过new访问。

 

package com.wangxing.chengyuan.test1;
public class Hello2 {
	//成员内部类
	public  class  World2{
		public String  worldshili="成员内部类中的实例变量";

		public World2(){
			System.out.println("成员内部类中的构造方法");
		}

		public World2(String name){
			World2 w2=new World2();
			System.out.println(w2.worldshili);
			System.out.println(this.worldshili);
			System.out.println(worldshili);
			w2.worldShiLiMethod1();
			this.worldShiLiMethod1();
			worldShiLiMethod1();
		}
		public  void  worldShiLiMethod1(){
			System.out.println("成员内部类中的实例方法");
		}
		
		public  void  worldShiLiMethod2(){
			System.out.println("成员内部类中的实例方法");
			World2 w2=new World2();
			System.out.println(w2.worldshili);
			System.out.println(this.worldshili);
			System.out.println(worldshili);
			w2.worldShiLiMethod1();
			this.worldShiLiMethod1();
			worldShiLiMethod1();
		}
	}
}

3.成员内部类中可以访问外部类的实例变量/实例方法,静态变量/静态方法,构造方法
   3.1.对实例变量/实例方法的访问,对象.实例变量/实例方法,外部类名.this.实例变量/实例方法,对象/外部类名.this可以省略。
   3.2.对静态变量/静态方法的访问,对象.静态变量/静态方法,外部类名.this.静态变量/静态方法,外部类类名.静态变量/静态方法,对象/外部类名.this/外部类类名可以省略。        
   3.3.对构造方法访问,通过new访问

package com.wangxing.chengyuan.test1;
public class Hello3 {
	public  String helloshili="外部类中的实例变量";
	public static  String hellostatic="外部类中的静态变量";
	public  Hello3(){
		System.out.println("外部类的构造方法");
	}
	public  void  helloShiLi(){
		System.out.println("外部类的实例方法");
	}
	public static void  helloStatic(){
		System.out.println("外部类的静态方法");
	}
	//成员内部类
	public  class  World3{
		public World3(){
			Hello3 h3=new Hello3();
			System.out.println(h3.helloshili);
			System.out.println(Hello3.this.helloshili);
			System.out.println(helloshili);
			System.out.println(h3.hellostatic);
			System.out.println(Hello3.this.hellostatic);
			System.out.println(Hello3.hellostatic);
			System.out.println(hellostatic);
			h3.helloShiLi();
			Hello3.this.helloShiLi();
			helloShiLi();
			h3.helloStatic();
			Hello3.this.helloStatic();
			Hello3.helloStatic();
			helloStatic();
		}
		public  void  worldShiLiMethod1(){
			Hello3 h3=new Hello3();
			System.out.println(h3.helloshili);
			System.out.println(Hello3.this.helloshili);
			System.out.println(helloshili);
			System.out.println(h3.hellostatic);
			System.out.println(Hello3.this.hellostatic);
			System.out.println(Hello3.hellostatic);
			System.out.println(hellostatic);
			h3.helloShiLi();
			Hello3.this.helloShiLi();
			helloShiLi();
			h3.helloStatic();
			Hello3.this.helloStatic();
			Hello3.helloStatic();
			helloStatic();
		}
	}
}

4.外部类中可以访问成员内部类中的元素
   4.1.外部类中的构造方法/实例方法中可以访问成员内部类中的实例变量/实例方法,构造方法,只能对象访问,不能省略。
   4.2.在外部类中的静态方法中不能访问成员内部类中的元素。

package com.wangxing.chengyuan.test1;
public class Hello4 {
	public  String helloshili="外部类中的实例变量";
	public static  String hellostatic="外部类中的静态变量";
	public  Hello4(){
		System.out.println("外部类的构造方法");
		World4 w4=new World4();
		System.out.println(w4.worldshili);
		w4.worldShiLiMethod1();
	}
	public  void  helloShiLi(){
		System.out.println("外部类的实例方法");
		World4 w4=new World4();
		System.out.println(w4.worldshili);
		w4.worldShiLiMethod1();
	}
	public static void  helloStatic(){
		System.out.println("外部类的静态方法");
		//World4 w4=new World4();
		//System.out.println(w4.worldshili);
		//w4.worldShiLiMethod1();
	}
	//成员内部类
	public  class  World4{
		public String  worldshili="成员内部类中的实例变量";
		public World4(){
			System.out.println("成员内部类中的构造方法");
		}
		public  void  worldShiLiMethod1(){
			System.out.println("成员内部类中的实例方法");
		}
	}
}

5.其他类中访问成员内部中的元素
     1.外部类名.内部类名 w1=new 外部类构造方法().new 内部类构造方法();

     2.外部类名 外部类对象=new 外部类构造方法();
        外部类名.内部类名 w1=外部类对象.new 内部类构造方法();

     3.import  包名.外部类名.内部类名;
            3.1 内部类名 w1=new 外部类构造方法().new 内部类构造方法();
            3.2 外部类名 外部类对象=new 外部类构造方法();
                  内部类名 w1=外部类对象.new 内部类构造方法();

package com.wangxing.chengyuan.test1;
public class Hello {
	//成员内部类
	public  class  World{
		public String  worldshili="成员内部类中的实例变量";
		public World(){
			System.out.println("成员内部类中的构造方法");
		}
		public  void  worldShiLiMethod(){
			System.out.println("成员内部类中的实例方法");
		}
	}
}

package com.wangxing.chengyuan.test1;
import com.wangxing.chengyuan.test1.Hello.World;
public class Other {
	public Other(){
		Hello.World w1=new Hello().new World();
		System.out.println(w1.worldshili);
		w1.worldShiLiMethod();
	}
	public void shili(){
		Hello  hello=new Hello();
		Hello.World w1=hello.new World();
		System.out.println(w1.worldshili);
		w1.worldShiLiMethod();
	}
	public static void staticmethod(){
		Hello  hello=new Hello();
		World w1=hello.new World();
		System.out.println(w1.worldshili);
		w1.worldShiLiMethod();
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/993143.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号