前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 内部类

Java 内部类

作者头像
用户2965768
发布2019-03-06 16:31:05
3980
发布2019-03-06 16:31:05
举报
文章被收录于专栏:wymwym

类中还有类就是内部类

一.成员内部类

代码语言:javascript
复制
public class Text {
	
	
	
	class  innerClass{//成员内部类
		int id = 88;//定义属性
		public innerClass(){//定义构造方法
			
		}
		public void  inf(){//内部成员方法 
			System.out.println("内部类id="+id);
		}
	}
	
	innerClass in = new innerClass();//创建内部类对象
	
	public void diaoy(){
		in.inf();//调用内部类方法
	}
	
	public static void main(String[] args) {
		Text text = new Text();
		text.diaoy();
		
		Text.innerClass class1 = text.new innerClass();//在main方法中创建类的内部类 
		//外部类.new 创建内部类
		class1.inf();
	}

}

 成员内部类是最普通的内部类,它的定义为位于另一个类的内部。

看起来innerClass 像该类的一个成员。该类称为外部类,内部类可以无条件访问外部类。

外部类访问内部类需要创建一个对象。

内部类依附外部类而存在,要创建内部类,先要创建外部类的对象。

二.局部内部类

该类访问仅限于方法内和该作用域内

代码语言:javascript
复制
public class Text2 {

	int qq = 1397995240;
	int tel = 151888;
	
	public outClass action(String x){
		
		
		class innerClass2 implements outClass{//在方法体中创建内部类,局部内部类
			
			int tel = 888151;
			
			public innerClass2(String s){//局部内部类构造方法
				s = x;
				System.out.println(s);
				System.out.println(qq);//内部类可以无条件访问外部类成员
				//如果重名 会显示内部类成员,此时若访问外部成员或方法需要指明
				System.out.println(tel);
				
				System.out.println(Text2.this.tel);//外部类.this.成员变量
			}
			
		}
		
		new innerClass2("do");//外部类要访问内部类成员 必须先创建这个类的对象
		//然后通过这个类来访问
		
		//若需要返回值, 由于外部没有这个类 可以创建一个接口  实现向上转型
		//则上面的 new innerClass2("do");可以去掉
		//返回值由void改为接口名; 类要继承这个接口 ;然后返回新建类型
		return new innerClass2("do");
	}
	
	public static void main(String[] args) {
		Text2 text2 = new Text2();
		text2.action("局部内部类");
	}
}
interface outClass{
	
}

三.匿名内部类

写法相当于注释掉的内容

代码语言:javascript
复制
public class Text3 {

	public out aOut(){
		
//		return new inner();
		
		//只有在使用的时候才写方法体 不知道叫什么名字 
		return new out() {
			private int i = 0;
			public int getV(){
				return i;
			}
		};//直接写方法体
	
		
	}
	public static void main(String[] args) {
		Text3 text3 = new Text3();
	}
}
interface out{
	
}
//class inner implements out{
//	private int i = 0;
//	public int getV(){
//		return i;
//	}
//}

四.静态内部类

我们可以将main方法写在静态内部类当中,有一个调试的功能

它不能使用外部类的非static方法

代码语言:javascript
复制
public class Text4 {

	static int i = 0;
	
	static class innerClass4{
		public static void main(String[] args) {
			System.out.println(i);
		}
	}
}

内部类的继承

代码语言:javascript
复制
public class Text {
	
	class  innerClass{//成员内部类
		int id = 88;//定义属性
		public innerClass(){//定义构造方法
			
		}
		public void  inf(){//内部成员方法 
			System.out.println("内部类id="+id);
		}
	}

	
	public static void main(String[] args) {
		Text text = new Text(); 
		NewClass newClass = new NewClass(text);
		newClass.inf();
		
	}
}

class  NewClass extends Text.innerClass{//继承方式ClassA.ClassB

	public NewClass(Text text){//需要有一个参数的构造方法,这个参数则是外部类的对象
		text.super();//调用外部类的方法 只有这样才能为外部类提供对象引用
	}
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年02月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档