栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 内部类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 内部类

内部类

1.Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类

2.内部类的分类:成员内部类(静态,非静态) 局部内部类(方法内,代码块内,构造器内)

public class InnerClassTest {
	
}

class Person{
	
	//静态成员内部类
	static class Brain{
		
	}
	//非静态成员内部类
	class Leg{
		
	}
	
	public void method(){
		//局部内部类
		class AA{
			
		}
	}
	
	{
		//局部内部类
		class BB{
		
		
		}
	}
	
	public Person(){
		//局部内部类
		class CC{
			
		}
	}
	
}
成员内部类

3.成员内部类:

​ 一方面作为外部类的成员

​ 调用外部类的结构

​ 可以被static修饰,外部类是不能用static修饰的

​ 可以被四种不同的权限修饰

​ 另一方面作为一个类出现

​ 类内可以定义属性、方法、构造器等

​ 可以被final修饰,表示此类不能被继承了,言外之意:不使用final就可以被继承

​ 可以被abstract修饰,表示此类不能被实例化了

class Person{
	
	String name;
	int age;
	
	public void eat(){
		System.out.println("吃饭");
	}
	
	
	//静态成员内部类
	abstract static class Brain{
		String name;
		
		public void show(){
			System.out.println("思考问题");
		}
	}
	//非静态成员内部类
	final class Leg{
		String name;
		
		public leg(){
			
		}
		
		public void run(){
			System.out.println("可以跑步");
			eat();//调用外部类的属性
		}
		
	}
}

4.关注以下三个问题

​ 如何实例化成员内部类的对象

public class InnerClassTest {
	//创建Brain实例(静态的成员内部类)
	Person.Brain brain = new Person.Brain();
	brain.show();
	
	//创建Leg实例(非静态的成员内部类)
	Person p = new Person();
	Person.Leg leg = p.new Leg();
	leg.run();
	
}

​ 如何在成员内部类中区分调用外部类的结构

public class InnerClassTest {
	public static void main(String[] args) {
		//创建Brain实例(静态的成员内部类)
		Person.Brain brain = new Person.Brain();
		brain.show();
		
		//创建Leg实例(非静态的成员内部类)
		Person p = new Person();
		Person.Leg leg = p.new Leg();
		leg.run();
		
		leg.display("bala");
	}
}


class Person{
	
	String name = "xiaoming";
	int age;
	
	public void eat(){
		System.out.println("吃饭");
	}
	
	
	//静态成员内部类
	static class Brain{
		String name;
		
		public void show(){
			System.out.println("思考问题");
		}
	}
	//非静态成员内部类
	class Leg{
		String name = "zuotui";
		
		public Leg(){
			
		}
		
		public void run(){
			System.out.println("可以跑步");
			eat();//调用外部类的属性
		}
		
		public void display(String name){
			System.out.println(name);//方法的形参
			System.out.println(this.name);//内部类的属性
			System.out.println(Person.this.name);//外部类的属性
		}
	}
}
局部内部类

​ 开发中,局部内部类的使用

public class InnerClassTest1 {
	
	//开发中很少见
	public void method(){
		//局部内部类
		class AA{
			
		}
	}
	
	//返回一个实现了Comparable接口的类的对象
	public Comparable getComparabale(){
		
		//创建一个实现了Comparable接口的类:局部内部类
		//方式一
//		class MyComparable implements Comparable{
//
//			@Override
//			public int compareTo(Object o) {
//				// TODO Auto-generated method stub
//				return 0;
//			}
//			
//		}
//		return new MyComparable();
		
		//方式二
		return new Comparable(){

			@Override
			public int compareTo(Object o) {
				// TODO Auto-generated method stub
				return 0;
			}
			
		}
		
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999480.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号