Java小白入门200例92之Java内部类--成员内部类

Posted 编程界明世隐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java小白入门200例92之Java内部类--成员内部类相关的知识,希望对你有一定的参考价值。

作者简介

作者名:编程界明世隐
简介:CSDN博客专家,从事软件开发多年,精通Java、javascript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞!

引言

很多Java初学者问我,新手明明很用心、很努力学习的Java知识,转头又忘记了,很让人犯愁,小白如何能够快速成长、成为大牛呢?
其实要成为大神的技巧只有一个:“多学多练”,于是明哥就整理了比较典型的练习实例,通过练习能够快速提升编码技巧和熟练度,让你在成为大佬的路上一去不复返(切记要亲手练习哦)!

导航

✪ Java小白入门200例系列目录索引
◄上一篇  91.Java接口(Interface)
►下一篇待更新     

概述

在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。
形如:
在类 A 中定义类 B,那么类 B 就是内部类,也称为嵌套类,相对而言,类 A 就是外部类。如果有多层嵌套,例如类 A 中有内部类 B,而类 B 中还有内部类 C,那么通常将最外层的类称为顶层类(或者顶级类)。

成员内部类

它最普通的内部类,它的定义为位于另一个类的内部。

实例1

一个普通的内部类

package demo.demo92;
//外部类
public class Outer {
    class Inner {
        // 内部类
    }
}

编译后的class文件,如图:

结论:
内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号

实例2

成员内部类可以无条件访问外部类的所有成员属性和成员方法。

package demo.demo92;
//外部类
public class Outer {
	private int a=10;
	private static int b=20;
	private void print(){
		System.out.println("外部类打印方法");
	}
	private static void static_print(){
		System.out.println("外部类static打印方法");
	}
	class Inner {
	    // 内部类
		
		private void test(){
			System.out.println(a);//外部类的private属性
			System.out.println(b);//外部类的静态属性
			print();//外部类的方法
			static_print();//外部类的静态方法
		}
	}  
}

实例3

当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。
用以下格式进行外部类的访问:

外部类.this.成员变量
外部类.this.成员方法

package demo.demo92;
//外部类
public class Outer {
	private int a=10;
	private void print(){
		System.out.println("外部类打印方法");
	}
	class Inner {
	    // 内部类
		private int a=10;
		private void print(){
			System.out.println("外部类打印方法");
		}
		
		private void test(){
			System.out.println(a);//内部类的private属性
			print();//内部类的方法
			
			System.out.println(Outer.this.a);//外部类的private属性
			Outer.this.print();//外部类的方法
		}
	}  
}

实例4

虽然成员内部类可以无条件地访问外部类的成员,在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问。

package demo.demo92;
//外部类
public class Outer {
	private int a=10;
	private void print(){
		//实例化内部类
		Inner inner = new Inner();
		//通过实例化后的对象来访问
		System.out.println(inner.b);
		inner.test();
	}
	class Inner {
	    // 内部类
		private int b=20;
		private void test(){
			System.out.println("内部类test方法");
		}
		
	}  
}

实例5

如果要创建成员内部类的对象,前提是必须存在一个外部类的对象。

package demo.demo92;
//外部类
public class Outer {

	class Inner {
	    // 内部类
		private int b=20;
		public void test(){
			System.out.println("内部类test方法");
		}
		
	}  
}
package demo.demo92;

public class Test {

	public static void main(String[] args) {
		//实例化外部类
		Outer outer = new Outer();
		//通过外部类的实例来创建内部类实例
		Outer.Inner inner = outer.new Inner();
		//内部类的实例调用test方法
		inner.test();
	}
}

运行:

内部类test方法

小结

这节总结了“ Java内部类–成员内部类 ”,希望能对大家有所帮助,请各位小伙伴帮忙 【点赞】+【收藏】+ 【评论区打卡】, 如果有兴趣跟小明哥一起学习Java的,【关注一波】不迷路哦。

评论区打卡一波让我知道你,明哥会持续关注你的学习进度哦!

导航

✪ Java小白入门200例系列目录索引
◄上一篇  91.Java接口(Interface)
►下一篇待更新     

热门专栏推荐

1.Java小游戏系列(俄罗斯方块、飞机大战、植物大战僵尸等)
2.JavaWeb项目实战(图书管理、在线考试、宿舍管理系统等)
3.JavaScript精彩实例(飞机大战、扫雷、贪吃蛇、验证码等)
4.Java小白入门200例
5.从零学Java、趣学Java、以王者荣耀角度学Java

以上是关于Java小白入门200例92之Java内部类--成员内部类的主要内容,如果未能解决你的问题,请参考以下文章

Java小白入门200例94之Java内部类--局部内部类

Java小白入门200例95之Java匿名类

Java小白入门200例105之Java ArrayList类

Java小白入门200例107之Java LinkedList类

Java小白入门200例112之Java HashSet类

Java小白入门200例111之Collections类操作集合详解