方法和作用域内的内部类及匿名内部类

公共接口

    1、Contents.java

package com.lh.innerclass.class3;

public interface Contents {
	int value();
}

    2、Destination.java

package com.lh.innerclass.class3;

public interface Destination {
	String readLabel();
}

一、方法中的内部类

package com.lh.innerclass.class3;

/****
 * 
 * 在方法体内部定义内部类
 * 
 * @author Liu
 *
 */
public class Parcel {
	public Destination destination(String s){
		class PDestination implements Destination{
			private String label;
			private PDestination(String whereTo){
				this.label = whereTo;
			}
			
			public String readLabel(){
				return this.label;
			}
		}
		
		return new PDestination(s);
	}

	public static void main(String[] args) {
		Parcel parcel = new Parcel();
		Destination destination = parcel.destination("Tasmania");
		System.out.println(destination.readLabel());
	}

}

二、作用域(if语句)内的内部类

package com.lh.innerclass.class3;

/***
 * 
 * 在if作用域中定义内部类
 * 
 * @author Liu
 *
 */
public class Parcel2 {
	private void internalTracking(boolean b,String s){
		if(b){
			class TrackingSlip{
				private String id;

				private TrackingSlip(String id) {
					this.id = id;
				}
				
				String getSlip(){
					return this.id;
				}
			}
			
			TrackingSlip trackingSlip = new TrackingSlip(s);
			System.out.println(trackingSlip.getSlip());
		}
	}
	
	public void track(String s){
		internalTracking(true,s);
	}

	//客户端完全不知道有内部类的创建
	public static void main(String[] args) {
		new Parcel2().track("hello");
	}

}

三、匿名内部类(实现接口)

package com.lh.innerclass.class3;

/***
 * 
 * 使用匿名内部类
 * 
 * @author Liu
 *
 */
public class Parcel3 {
	public Contents contents(){
		return new Contents() {
			private int value = 11;
			
			//不仅仅是一个接口,还可以是一个抽象类,甚至是一个实现类,只是均需覆盖其中的方法
			public int value() {
				return this.value;
			}
		};
	}

	public static void main(String[] args) {
		System.out.println(new Parcel3().contents().value());
	}

}

四、匿名内部类(具体的实现类)

    1、Wrapping.java

package com.lh.innerclass.class3;

/***
 * 
 * 一个具体的实现类
 * 
 * @author Liu
 *
 */
public class Wrapping {
	private int i;

	public Wrapping() {

	}

	public Wrapping(int i) {
		this.i = i;
	}

	//这里进行了改动
	public int getI() {
		return i * 10;
	}

	public void setI(int i) {
		this.i = i;
	}

}

    2、Parcel4.java 

package com.lh.innerclass.class3;

/***
 * 
 * 覆盖一个具体实现类的例子
 * 
 * @author Liu
 *
 */
public class Parcel4 {
	public Wrapping wrapping(int x) {
		//Wrapping是一个具体的实现类
		return new Wrapping(x) {
			@Override
			public int getI() {
				return super.getI() * 5;
			}
		};
	}

	public static void main(String[] args) {
		System.out.println(new Parcel4().wrapping(10).getI());
	}

}

五、在匿名内部类中添加实现类的构造方法

package com.lh.innerclass.class3;

/****
 * 
 * 如何在匿名内部类中添加实现类的构造方法的代码
 * 
 * @author Liu
 *
 */
public class AnonymousConstructor {
	static abstract class Base {
		private int i;

		private Base(int i) {
			this.i = i;
			System.out.println("Base's Constructor: " + i);
		}

		public int getI() {
			return i;
		}

		abstract void f();
	}
	
	public static Base getBase(int x){
		//x传递给了父类的构造器
		return new Base(x){
			//使用{}添加子类构造器代码
			{
				System.out.println("调用子类的构造方法...");
			}

			@Override
			void f() {
				System.out.println("实现了的方法...");
			}
			
		};
	}

	public static void main(String[] args) {
		AnonymousConstructor.getBase(10).f();
	}

}

 

转载于:https://my.oschina.net/Howard2016/blog/1618058

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值