内部类的学习

1.成员内部类格式: 修饰符 class 类名称{
修饰符 class 类名称{}
}
内用外:随便用 外用内:一定要借助内部类对象
2.内部类使用方法:
间接调用 通过外部类的方法间接调用内部类
直接调用 公式 类名称 对象名=new 类名称();
外部类名称.内部类名称 对象名=new 外部类名称().new内部类名称()
*/

3: 成员变量的理解:
/*当外部成员变量与内部成员变量以及内部方法成员变量同名时,
名字调用的是方法成员变量
this.名字调用的是内部成员变量
要在内部类中调用外部成员变量-> 外部类名称.this.成员变量
*/

public class Demo1 {
	public static void main(String args[]) {
		//间接调用
		Body body =new Body();
		body.setName("qwe");
		body.insideClass();//通过调用外部类的方法间接调用方法中包含的内部类方法
		System.out.println("==============");
		
		//内部类直接调用
		Body.Heart heart=new Body().new Heart();
		heart.setName("zxc");
		heart.heartWork();
		heart.Workoutside();	
		
		//两种方法相同
		Body body1=new Body();
		Body.Heart heart1=body1.new Heart();
		heart1.setName("zxc");
		heart1.heartWork();
		heart.Workoutside();
	}
}

public class Body {
	//外部类成员和方法
		private String name;    //外部类的成员变量
		public void insideClass() {
			Heart heart=new Heart();
			heart.setName("asd");
			heart.heartWork();    
			new Heart().heartWork();  //**匿名对象**
			
			heart.Workoutside();
			new Heart().Workoutside();
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		
		
	public class Heart{  //内部类
		private String name;    //内部类的成员变量
		public void heartWork() {
			System.out.println("内部类工作!");
		}
		
		public void Workoutside() {
			String name="rty";  //内部类方法的局部变量
			System.out.println("name调用的是内部类中方法成员name:"+name); //成员变量同名时,由于就近原则,优先调用内部类方法成员变量
			System.out.println("this.name调用的是内部类成员name:"+this.name); //调用的是内部类成员
			System.out.println("Body.this.name调用的是外部成员变量name:"+Body.this.name);//调用的是外部成员变量
			
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}
	}
	
}
                            **匿名内部类**

使用在:如果接口的实现类(或者是父类或子类)只需要使用一次,那么这种情况下就可以使用匿名内部类。
匿名内部类的定义格式:
接口名称 对象名 = new 接口名称(){
覆盖重写所有抽象方法;
};
注意事项:
1:匿名内部类在创建对象的时候只能使用唯一一次
2:匿名对象在调用方法的时候只能调用一次
3:匿名内部类省略的是(实现类/子类) 匿名对象省略的是对象名称

public class Demo1 {
	public static void main(String args[]) {
		Body body=new Body() {

			@Override
			public void method() {
				System.out.println("匿名类方法实现!");
			}
		};
		body.method();
		//相同输出
		new Body(){
			public void method(){
				System.out.println("匿名类方法实现!");
		}
	}.methed();
}
public interface Body {
	void method();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值