天天看点

Java的各种内部类

1.普通内部类

package learn2;

//外部类HelloWorld
public class NeiBuClass {
  
  // 内部类Inner,类Inner在类HelloWorld的内部
	public class Inner {
		//创建一个内部类方法
		public void show() {
			System.out.println("welcome to Chain!");
		}
	}
  
	public static void main(String[] args) {
      
      // 创建外部类对象
		NeiBuClass hello = new NeiBuClass();
      // 创建内部类对象
		Inner i = hello.new Inner();
      // 调用内部类对象的方法
		i.show();
	}
}

           
package learn2;
//外部类
public class Outer {
	//外部类的私有属性name
    private String name = "Mi";
    
    //外部类的成员属性
    int age = 20;
    
	//成员内部类Inner
	public class Inner {
		String name = "小米";
        //内部类中的方法
		public void show() { 
			System.out.println("外部类中的name:" + Outer.this.name);
			System.out.println("内部类中的name:" + name);
			System.out.println("外部类中的age:" + age);
		}
	}
    
	//测试成员内部类
	public static void main(String[] args) {
        
        //创建外部类的对象
		Outer o = new Outer (); 
        
        //创建内部类的对象
		Inner inn =o.new Inner();
        
        //调用内部类对象的show方法
		inn.show();
	}
}

           

2.内部静态类

package learn2;
//外部类
public class Souter {
	private int a = 90;//外部类的私有变量
	static int b = 3;//外部类的静态变量
	
	//内部静态类
	public static class Sinner{
		int b = 2;//内部静态类的变量
		public void show() {
			System.out.println("访问外部类中的变量b:"+Souter.b);
			System.out.println("访问内部类中的变量b:"+b);
		}
	}
	public static void main(String[]args){
		Sinner i = new Sinner();//直接创建内部静态类的对象
		i.show();//对内部静态类中的方法进行调用
	}
}

           

3.方法内部的类

package learn2;

public class MethodInClass {
	private String name = "小米";
    
    // 外部类中的show方法
    public void show() { 
		// 定义方法内部类
		class MInner {
			int score = 83;
			public int getScore() {
				return score + 10;
			}
		}
        
		// 创建方法内部类的对象
        MInner mi = new MInner();
        int newScore = mi.getScore();// 调用内部类的方法
        
        
		System.out.println("姓名:" + name + "\n加分后的成绩:" + newScore);
	}
    
	// 测试方法内部类
	public static void main(String[] args) {
        
		// 创建外部类的对象
        MethodInClass mo = new MethodInClass();
        
        // 调用外部类的方法
		mo.show();
	}
}