内部类的学习

日积月累, 滴水石穿。敲代码是极好的。。。
package com.gt.gtop.test.java8;

/**
 * 内部类的学习
 * @author 非宁静无以致远
 *
 */
public class InnerClass {
	public static void main(String[] args) {
		//1、********************** 成员内部类 star*************************
		InnerClass innerClass = new InnerClass();
		InnerClass.Car car = innerClass.new Car();    //创建  成员内部类对象方法一
		Car car2 = innerClass.getCar();   //创建  成员内部类对象方法一
		car.in();
		car.in("t");
		car2.in();
		car2.in("t");
		//************************** 成员内部类 end*********************
		
		
		//2、********************** 局部内部类 star*************************
		InnerClass innerClass1 = new InnerClass();
		innerClass1.run();
		innerClass1.run2(true);
		//************************** 局部内部类 end*********************

		//3、********************** 嵌套内部类 star*************************
		InnerClass.run3();
		//************************** 嵌套内部类 end*********************
		
		
		//4、********************** 匿名内部类 star*************************
		InnerClass innerClass4 = new InnerClass();
		innerClass4.demo();
		//************************** 匿名内部类 end*********************
		
	}
	
	public void out(){
		System.out.println("这是外部类的无参数方法");
	}
	public void out(String s){
		System.out.println("这是外部类的有参数方法, 参数:" + s);
	}
	
	//********************** 成员内部类 star*************************
	//	1. 成员内部类
	//  成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。
	//	同时外部类要访问内部类的所有成员 变量或方法,则需要通过内部类的对象来获取。
	// (成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的)
	
	public Car getCar(){
		return new Car();
	} 
	public class Car{
		public void in(){
			System.out.println("这是成员内部类的无参数方法");
			out();
		}
		public void in(String s){
			System.out.println("这是成员内部类的有参数方法, 参数:" + s);
			out(s);
		}
	}
	//********************** 成员内部类 end*************************
	
	
	//2、********************** 局部内部类 star*************************
	//局部内部类,是指内部类定义在方法和作用域内
	//定义在方法内 
	public void run(){
		class Person{
			public void in(){
				System.out.println("这是成员内部类的无参数方法");
				out();
			}
			public void in(String s){
				System.out.println("这是成员内部类的有参数方法, 参数:" + s);
				out(s);
			}
		}
		
		Person person = new Person();
		person.in();
		person.in("kk");
	}
	//定义在作用域内
	//局部内部类也像别的类一样进行编译,但只是作用域不同而已,只在该方法或条件的作用域内才能使用,退出这些作用域后无法引用的
	public void run2(boolean flag){
		if(flag){
			System.out.println("在作用域内!");
			class Person{
				public void in(){
					System.out.println("这是成员内部类的无参数方法");
					out();
				}
				public void in(String s){
					System.out.println("这是成员内部类的有参数方法, 参数:" + s);
					out(s);
				}
			}
			Person person = new Person();
			person.in();
			person.in("PP");
		}else{
			System.out.println("不在作用域内!");
		}
	}
	//************************** 局部内部类 end*********************
	
	
	//3、********************** 嵌套内部类 star*************************
		//嵌套内部类,就是修饰为static的内部类。声明为static的内部类,不需要内部类对象和外部类对象之间的联系
	public static void run3(){
		class Person{
			public void in(){
				System.out.println("这是成员内部类的无参数方法");
			}
			public void in(String s){
				System.out.println("这是成员内部类的有参数方法, 参数:" + s);
			}
		}
		
		Person person = new Person();
		person.in();
		person.in("qiantao");
	}
	//************************** 嵌套内部类 end*********************
	
	
	//4、********************** 匿名内部类 star*************************
	//只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现
	public void demo(){
		Runnable runnable = new Runnable() {
			public void run() {
				System.out.println("这是匿名内部类");
			}
		};
		runnable.run();
	}
	
	//************************** 匿名内部类 end*********************
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值