Java学习笔记-内部类

Java内部类

大部分时间类被定义为一个独立的程序单元,但是在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在另一个类内部的类被称为内部类

主要作用:

  1. 内部类提供了更好的封装,可以把内部类隐藏在外部类里面,不允许同一个包中其他类访问。例如:创建一个Cow类,Cow类需要组合一个CowLeg类,CowLeg类只能通过Cow类访问,离开Cow类之后CowLeg类没有任何意义。
  2. 内部类成员可以直接访问外部类的私有数据。
  3. 匿名内部类适用于那些仅需一次使用的类。
  • 非静态内部类

大部分时候内部类内部类都被作为成员内部类定义,而不是作为局部内部类。成员内部类是一种与成员变量,方法,构造器和初始化块相似的类成员;局部内部类和匿名内部则不是类成员。

内部类作为外部类的成员,可以使用人访问控制符:private,protect,public等修饰。

class Outer {
	private String info = "helloworld";
	class Inner{
		private String info = "世界,你好";
		public void print() {
        /*
        当外部类成员变量,内部类成员变量与内部类方法里的局部变量同名时,则可以通过this,外部 
        类.this作为限定区分
        */
			System.out.println(Outer.this.info);
		}
	}
	public void getInfo() {
		new Inner().print();
		System.out.println(new Inner().info);
	}
}


public class TestDemo {
	public static void main(String[] args) {
        //当内部类使用private修饰时,无法实例化内部类
		Outer.Inner outer = new Outer().new Inner();
		outer.print();
		Outer inner = new Outer();
		inner.getInfo();
	}
}


结果:
helloworld
helloworld
世界,你好

PS:Java不允许外部类的静态成员直接使用非静态内部类,也不允许非晶态内部类里面定义静态成员!

  • 静态内部类

如果使用static来修饰一个内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象。因此使用static修饰的内部类被称为类内部类,也被称为静态内部类。

一个静态内部内只能访问外部内中定义的static操作。

public class Demo {
	private int a = 5;
	private static int b = 7;
	static class Inner{
		//静态内部类可以包含成员静态变量
		private static int age;
		public void print() {
			//静态内部类无法访问外部类的非static成员下面代码出现错误
			System.out.println(a);
			System.out.println(b);
		}
	}
	public static void main(String[] args) {
        //静态内部类的实例化
		Demo.Inner de = new Demo.Inner();
	}
}
  • 局部内部类

如果把一个类放在方法里面定义,那么这个类就是一个局部内部类,局部内部类仅在方法里面有效。由于局部内部类不能放在外部类的方法以外使用,因此局部内部类不能使用访问控制符和static修饰符修饰。

class TestOuter {
	private String info = "helloworld";
     /*
    JDK1.7以及之前版本中,方法定义的内部类如果想访问方法的参数或者是方法定义的变量,那么参数或变量之前一定套加上“final”标记。
    */
	public void fun(final int num) {
		final String myinfo = "my love";
		class Inner{
			public void print() {
				System.out.print(TestOuter.this.info+" ");
				System.out.println(myinfo);
				System.out.println(num);
			}
		}
		new Inner().print();
	}
}

public class TestDemo3 {
	public static void main(String[] args) {
		new TestOuter().fun(100);;
	}
}

结果:
helloworld my love
100

  • 匿名内部类

匿名内部类适合创建那种只需要使用一次的类。

格式:

new 实现接口()| 父类构造器(实参列表)

{

     //匿名内部类的类体部分

}

规则:

1.匿名内部类不能是抽象类,因为系统创建匿名内部类时会立即创建内部类的对象。因此不能将匿名内部类定义成抽象类。

2.匿名内部类不能定义构造器。由于匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以定义初始化块,可以实例化初始块来完成构造器需要完成的事。

interface Message{
	public void print();
}


public class TestDemo {
	public static void main(String[] args) {
		fun(new Message() {
			public void print() {
				System.out.println("Hello World");
			}
		});
	}
	public static void fun(Message msg) {
		msg.print();
	}
}

结果:
Hello World

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java技术基础 4 1.1编程语言 4 1.2 Java的特点 4 1.3 Java开发环境 4 1.4 Java开发环境配置 5 1.5 Linux命令与相关知识 5 1.6 Eclipse/Myeclipse程序结构 6 Java语言基础 7 2.1基础语言要素 7 2.2八种基本数据类型 7 2.3常量和变量 8 2.4运算符与表达式 8 2.5编程风格 9 2.6流程控制语句 10 2.7数组 11 2.8字符串 11 2.9方法三要素 12 2.10插入排序 12 2.11冒泡排序 12 2.12冒泡排序:轻气泡上浮的方式 13 2.13二分法查找 13 2.14 Java系统API方法调用 14 2.15二进制基础 14 2.16 Java基础其他注意事项 14 面向对象 16 3.1类 16 3.2对象 16 3.3包 16 3.4方法及其调用 17 3.5引用 17 3.6访问控制(封装) 17 3.7构造器 17 3.8 super()、super.和 this()、this. 18 3.9重载和重写 19 3.10继承 20 3.11 static 23 3.12 final 24 3.13多态 25 3.14抽象类 25 3.15接口 25 3.16内部类 26 3.17匿名类 27 3.18二维数组和对象数组 28 3.19其他注意事项 28 Java SE核心I 30 4.1 Object类 30 4.2 String类 31 4.3 StringUtils类 33 4.4 StringBuilder类 33 4.5正则表达式 34 4.6 Date类 35 4.7 Calendar类 35 4.8 SimpleDateFormat类 36 4.9 DateFormat类 36 4.10包装类 37 4.11 BigDecimal类 38 4.12 BigInteger类 38 4.13 Collection集合框架 38 4.14 List集合的实现类ArrayList和LinkedList 39 4.15 Iterator迭代器 42 4.16泛型 43 4.17增强型for循环 43 4.18 List高级-数据结构:Queue队列 44 4.19 List高级-数据结构:Deque栈 44 4.20 Set集合的实现类HashSet 45 4.21 Map集合的实现类HashMap 46 4.22单例模式和模版方法模式 48 Java SE核心II 49 5.1 Java异常处理机制 49 5.2 File文件类 51 5.3 RandomAccessFile类 53 5.4基本流:FIS和FOS 55 5.5缓冲字节高级流:BIS和BOS 56 5.6基本数据类型高级流:DIS和DOS 56 5.7字符高级流:ISR和OSW 57 5.8缓冲字符高级流:BR和BW 58 5.9文件字符高级流:FR和FW 59 5.10 PrintWriter 60 5.11对象序列化 60 5.12 Thread线程类及多线程 61 5.13 Socket网络编程 65 5.14线程池 67 5.15双缓冲队列 68
《Python学习笔记》是由皮大庆编写的一本关于Python语言学习的教材。在这本书中,作者详细介绍了Python语言的基础知识、语法规则以及常用的编程技巧。 首先,作者简要介绍了Python语言的特点和优势。他提到,Python是一种易于学习和使用的编程语言,受到了广大程序员的喜爱。Python具有简洁、清晰的语法结构,使得代码可读性极高,同也提供了丰富的库和模块,能够快速实现各种功能。 接着,作者详细讲解了Python的基本语法。他从变量、数据类型、运算符等基础知识开始,逐步介绍了条件语句、循环控制、函数、模块等高级概念。同,作者通过大量的示例代码和实践案例,帮助读者加深对Python编程的理解和应用。 在书中,作者还特别强调了编写规范和良好的编程习惯。他从命名规范、注释风格、代码缩进等方面指导读者如何写出清晰、可读性强的Python代码。作者认为,良好的编程习惯对于提高代码质量和提高工作效率非常重要。 此外,作者还介绍了Python的常用库和模块。他提到了一些常用的库,如Numpy、Pandas、Matplotlib等。这些库在数据处理、科学计算、可视化等领域有广泛的应用,帮助读者更好地解决实际问题。 总的来说,《Python学习笔记》是一本非常实用和全面的Python学习教材。通过学习这本书,读者可以系统地学习和掌握Python编程的基础知识和高级应用技巧,为以后的编程学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值