`
jackleechina
  • 浏览: 585103 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

java 复习笔记——内部类及其实例化

    博客分类:
  • java
 
阅读更多
1)在方法中定义的内部类,如果要访问方法中定义的本地变量或方法的参数,则变量必须被声明final。
2)内部类可以声明为private或protected;还可以声明为abstract或final。
3)内部类可以声明为static的,但此时就不能再使用外部类的非static的成员变量和非static的成员方法;
4)非static的内部类中的成员不能声明为static的,只有在顶层类或static的内部类中才可声明static成员。

5)若在某个方法中声明一个内部类,则这个内部类的执行周期限于这个方法中,只在这个方法中可见。

6)实例化内部类
class Outer
{
	private static int index=100;
	class Inner
	{
		private int index=50;
		void print()
		{
			int index=30;
			System.out.println(index);			
		}
	}
	Inner getInner(){
		return new Inner();
	}
}

class Test
{
	public static void main(String[] args)
	{
		Outer outer=new Outer();
		Outer.Inner inner1=outer.getInner();//实例化内部类方法1
		Outer.Inner inner2=outer.new Inner();//实例化内部类方法2
	}
}


7)实例化 继承了内部类的子类

class Car
{
	class Wheel
	{
	}
}

class PlaneWheel extends Car.Wheel
{
	PlaneWheel(Car car)
	{
		car.super();//步骤2)再实例化内部类Car.Wheel,利用了super()函数
	}
	public static void main(String[] args)
	{
		Car car=new Car();//步骤1)先实例化Car类
		PlaneWheel pw=new PlaneWheel(car);
	}
}


7.1)
理解好 7)中步骤2)中的car.super(),它为当前子类的父类的构造方法。进一步构造代码如下:
class Car
{
	
	class Wheel
	{
			Wheel(){
		       System.out.println("Base1"); 
	    }
	}
}

class Car2
{
	
	class Wheel2
	{
			Wheel2(){
		       System.out.println("Base2"); 
	    }
	}
}

class PlaneWheel2 extends Car2.Wheel2
{
	PlaneWheel2(Car2 car2)
	{
		car2.super();
	}
}

class PlaneWheel extends Car.Wheel
{
[color=red]	PlaneWheel(Car car)
	{
		car.super();
	}[/color]
	public static void main(String[] args)
	{
		Car2 car2=new Car2();
		PlaneWheel2 pw=new PlaneWheel2(car2);
	}
}

程序运行结果为:Wheel2

7.2)
即是形参所在(子)类的父类,而不是实参所在(子)类的父类。具体如下:
class Car
{	
	class Wheel
	{
			Wheel(){
		       System.out.println("Wheel1"); 
	    }
	}
}

class Car2
{	
	class Wheel2
	{
			Wheel2(){
		       System.out.println("Wheel2"); 
	    }
	}
}

class PlaneWheel2 extends Car2.Wheel2
{
	PlaneWheel2(Car2 car2)
	{
		car2.super();
	}
}

class PlaneWheel extends Car.Wheel
{
[color=red]	PlaneWheel(Car car)
	{
		car.super();
	}[/color]
	static Car2 car2=new Car2();//必须声明为static,静态main()方法中才能引用。
	public static void main(String[] args)
	{		
		PlaneWheel2 pw=new PlaneWheel2(car2);
	}
}



7.3)
注意:7.1)和7.2)中标红部分代码不能去掉。(貌似是必须的构造函数。)


8.1)内部类的应用1:内部类实现接口,同时隐藏接口的具体实现细节。
interface Animal
{
	void eat();
	void sleep();
}

class Zoo
{
	private class Tiger implements Animal
	{
		public void eat()
		{
			System.out.println("tiger eat");
		}
		public void sleep()
		{
			System.out.println("tiger sleep");
		}
	}
	Animal getAnimal()
	{
		return new Tiger();
	}
}

class Test
{
	public static void main(String[] args)
	{
		Zoo z=new Zoo();
		Animal an=z.getAnimal();
		an.eat();
		an.sleep();
	}
}

8.2)内部类的应用2:解决多个接口或父类中有方法名重名的问题。
interface Machine
{
	void run();
}

class Person
{
	void run()
	{
		System.out.println("run");
	}
}

class Robot extends Person
{
	private class MachineHeart implements Machine
	{
		public void run()
		{
			System.out.println("heart run");
		}
	}
	Machine getMachine()
	{
		return new MachineHeart();
	}
}

class Test
{
	public static void main(String[] args)
	{
		Robot robot=new Robot();
		Machine m=robot.getMachine();
		m.run();
		robot.run();
	}
}


8.3)内部类的应用3:解决类的多继承问题
class A
{
	void fn1()
	{
	}
}

abstract class B
{
	abstract void fn2();
}

class C extends A
{
	B getB()
	{
		return new B()
		{
			public void fn2()
			{
			}
		};
	}
}

class Test
{
	static void method1(A a)
	{
		a.fn1();
	}
	static void method2(B b)
	{
		b.fn2();
	}
	public static void main(String[] args)
	{
		C c=new C();
		method1(c);
		method2(c.getB());
	}
}



摘自:孙鑫老师的java视频。
分享到:
评论

相关推荐

    Java学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    JAVA学习笔记————————

    3. **异常处理**:JAVA提供了一种结构化的异常处理机制,学习笔记会解释何时及如何使用try-catch-finally语句块,以及不同类型的异常类。 4. **内存管理与垃圾回收**:JAVA的自动内存管理是通过垃圾回收机制实现的...

    狂神Java学习笔记————前端入门——html、css、JavaScript学习代码

    【狂神Java学习笔记——前端入门——HTML、CSS、JavaScript学习代码】是针对初学者的一份详实的学习资料,这份笔记记录了跟随B站知名up主“遇见狂神说”的java系列视频中关于前端开发的基础内容。笔记内容不仅与视频...

    JSP复习笔记——第10章 连接数据库 之 JDBC相关 - 堕落天使 - JavaEye技术网站.mht

    JSP复习笔记——第10章 连接数据库 之 JDBC相关 - 堕落天使 - JavaEye技术网站.mhtJSP复习笔记——第10章 连接数据库 之 JDBC相关 - 堕落天使 - JavaEye技术网站.mht

    Thinking in Java 自学笔记——第一章 对象导论

    Thinking in Java 自学笔记——第一章 对象导论 本章节总结了面向对象程序设计(Object-oriented Programming, OOP)的基本概念和原则,以帮助读者更好地理解 Java 编程语言。以下是对标题、描述、标签和部分内容的...

    Thinking in Java 自学笔记——第二章 一切皆对象

    ### Thinking in Java 自学笔记——第二章 一切皆对象 #### 重要概念解析 ##### 2.1 用引用操纵对象 在Java中,一切都被视为对象,这意味着无论是字符串、数字还是其他数据类型都可以被视为对象来进行操作。当...

    java学习笔记——异常

    Java学习笔记——异常 在Java编程中,异常处理是一项至关重要的技能,它允许开发者优雅地处理程序运行时可能遇到的问题,防止程序意外终止,并提供有用的反馈信息。异常是程序执行过程中遇到的不正常情况,例如除以...

    java学习笔记(内部类)汇集

    ### Java学习笔记——内部类详解 #### 一、引言 Java中的内部类是一个非常有用但又容易让人感到困惑的概念。内部类本质上是在另一个类的内部定义的类,它可以访问外部类的所有成员变量和方法,甚至是私有成员。...

    超详细的Java复习知识点2019——个人笔记.zip

    这份名为"超详细的Java复习知识点2019——个人笔记"的文档,旨在为初学者提供一个全面且深入理解Java基础知识的指南。笔记内容可能涵盖了以下几个关键领域: 1. **Java语法基础**:包括变量、数据类型、运算符、...

    java复习笔记

    这份"java复习笔记"旨在帮助学习者系统地回顾和深入理解Java的关键概念和技术,以便于提升编程技能和应对各种开发挑战。 一、基础语法 Java的基础语法包括变量、数据类型、运算符、流程控制语句等。例如,变量是...

    个人学习的java笔记——思维导图

    这份"个人学习的java笔记——思维导图"是作者学习Java过程中的总结,通过思维导图的形式,将复杂的概念和知识结构化,便于理解和记忆。下面,我们将深入探讨其中涉及的一些关键知识点。 1. **基础语法**:Java的...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及核心特性。这份PPT简体版旨在帮助读者快速掌握Java开发的基本技能,逐步成为一名合格的Java程序员。 Java JDK...

    gtk笔记——按钮

    GTK笔记——按钮 GTK笔记——按钮是对GTK开发时的按钮进行了详细介绍,是进行跨平台图形开发不可获缺的部分。GTK笔记——按钮是GTK开发中最基本也最常用的控件之一,它允许用户点击它们,以完成某些操作,如保存...

    Python学习笔记——对象和类

    Python学习笔记——对象和类

    Java JDK 6学习笔记——ppt简体版.rar

    这份"Java JDK 6学习笔记——ppt简体版"提供了关于这个关键版本的详细教程,适合初学者和有一定经验的开发者来深入理解Java编程。 首先,我们要了解Java JDK是什么。Java Development Kit,简称JDK,是Oracle公司...

    FPGA自学笔记——设计与验证公开版

    通过上述内容的介绍,可以看出FPGA自学笔记——设计与验证公开版不仅涵盖了FPGA的基本原理和技术细节,还深入探讨了FPGA技术的发展趋势及其在实际应用中的重要性。这对于初学者来说是非常宝贵的学习资源。

    Java JDK 6学习笔记——ppt简体版附课本代码

    这份“Java JDK 6学习笔记——ppt简体版”涵盖了Java语言的核心概念、语法特性以及JDK 6的新功能,旨在帮助初学者和有经验的开发者深入理解并掌握这一版本的Java开发环境。 首先,Java JDK 6的安装与配置是学习的...

    JSP复习笔记——第11章 JSP 构架和MVC设计模式

    本篇复习笔记主要关注的是JSP构架以及MVC(Model-View-Controller)设计模式的应用。 MVC设计模式是软件工程中的一种架构模式,它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)...

Global site tag (gtag.js) - Google Analytics