java中四种静态内部类总结(仅供参考)

本文通过实例详细解析Java中四种内部类的使用方法:非静态内部类、静态内部类、局部内部类和匿名内部类。展示了如何在外部类中定义这些内部类,并在main方法中进行调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面通过一个例子来对这四种内部类的使用方法进行总结:
/**
 * @author zhenglulu
 * 通过在Test类中定义四种内部类并在main方法中分别进行调用来加深对内部类的理解
 */

public class Student {
	private int id = 2010;                     //id默认为2010
	String name = "student";                   //name默认为student
	static String schoolName = "湖南大学";      //定义一个面向湖南大学学生的类,所以所有的学生对象共享一个学校名称对象
	
	public void setName(String n){
		name = n;
		System.out.println("name = " + name);
	}
	/*
	 * 普通的内部类(非静态内部类),当然前面可加public,protected,缺省的,private范围修饰符
	 */
	class InnerClass{
		String name = "InnerStudent";
		public void print(){
			//因为普通内部类(非静态内部类)默认保存有指向外部类对象的引用,所以可以访问外部类中的任何成员变量及方法
			System.out.println("schoolName:"+schoolName + ", name:" + name + ", id:" + id);
			//如果想得到父类中的name,使用Student.this.name
			System.out.println("parent's name:" + Student.this.name);
		}
	}
	
	/*
	 * 静态内部类,他跟非静态内部类相比,区别就在于他不保存有指向外部类对象的引用,所以,从狭义上讲,他不是内部类,
	 * 这种类在运行时的行为和功能与普通类没什么区别,
	 */
	static class StaticClass{
		String name = "StaticStudent";
		public void print(){
			System.out.println("name:" + name);
			System.out.println("schoolName:" + Student.schoolName);   //只能访问父类中的静态成员
		}
	}
	
	/*
	 * 局部内部类,他是定义在方法中的类,如果我们在用一个内部类的时候仅需要创建它的一个对象并返回给外部,就可以这样做
	 */
	public Student method(){
		class PartClass extends Student{
			String name;
			public PartClass(String name){
				this.name = name;
				System.out.println("PartClass's name:" + name);
			}
		}
		return new PartClass("PartStudent");
	}
	
	/*
	 * 匿名内部类,当你只需要创建一个类的对象而且用不上它的名字时,使用匿名内部类可以使代码看上去简洁清楚
	 */
	public Student method1(){
		return new Student(){
			public void setName(String name){
				System.out.println("name = " + name);
			}
		};
	}
	
	public static void main(String[] args){
		Student s = new Student();                        //创建一个外部类Student类的对象
		Student.InnerClass sic = s.new InnerClass();      //得到一个内部类的对象
		sic.print();                                      //调用InnerClass内部类对象的print方法
		
		StaticClass sc = new StaticClass();              //创建一个静态内部类对象
		sc.print();                                      //调用该静态内部类对象的print方法
		
		s.method();                                     //调用Student类中的method方法,得到一个PartClass类的对象
		
		//调用Student类中的method1方法,返回一个继承了Student类的对象,并调用它的setName方法
		s.method1().setName("lulu");                     
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值