学习任务:

视频学习

动手编写成员内部类案例

下边案例实现了攀博课堂的视频处理器,它的作用是对攀博课堂的教学视频进行处理。

1)定义视频类

package com.pbteach.javase.oop.innerclass;

/**
 * 视频类
 * @author 攀博课堂
 * @version v1.0
 */
public class Video {

	//视频名称
	private String name;
	//视频地址
	private String address;
	//视频类型
	private String type;
	//...
	
	public Video(String name,String type,String address) {
		this.name = name;
		this.type = type;
		this.address = address;
		
	}

	public String getName() {
		return name;
	}

	public String getAddress() {
		return address;
	}

	public String getType() {
		return type;
	}

	@Override
	public String toString() {
		return "Video [name=" + name + ", address=" + address + ", type=" + type + "]";
	}
	
	
}

2)视频处理类

视频处理类包括视频处理任务、处理结果两个内部类,代码如下:

视频处理任务和处理结果两个类都隶属于视频处理类而存在,所以两者定义为内部类。

处理任务类仅供VideoProcessor内部使用,所以使用private修饰。

处理结果类会在外部类以外使用所以使用public修饰。

package com.pbteach.javase.oop.innerclass;


/**
 * 视频处理器
 * @author 攀博课堂
 * @version v1.0
 */
public class VideoProcessor {
	
	//视频
	private Video video;
	
	//处理结果
	private VideoProcessorResult videoProcessorResult;
	
	public VideoProcessor(Video video) {
		this.video = video;
	}
	//成员方法
	public void printVideo() {
		System.out.println(video);
	}
	
	
	//处理方法
	public void process() {
		//处理任务
		VideoProcessorTask videoProcessorTask = new VideoProcessorTask();
		//开始处理
		videoProcessorTask.start();
	}
	//视频处理任务类
	private class VideoProcessorTask{
		
		//启动任务
		public void start() {
			System.out.println("启动任务处理视频任务");
			//处理视频信息,这里调用外部类方法
			printVideo();
			//直接访问外部类中的成员
			videoProcessorResult = new VideoProcessorResult(1,"成功","视频新地址");
		}
		//终止任务
		public void cancel() {
			System.out.println("终止任务");
			
		}
	}
	//处理结果
	public class VideoProcessorResult{
		
		//结果代码,1表示成功,0表示失败
		private int code;
		//失败信息
		private String msg;
		//视频新地址
		private String newAddress;
		
		public VideoProcessorResult(int code,String msg,String newAddress) {
			this.code = code;
			this.msg = msg;
			this.newAddress = newAddress;
		}

		@Override
		public String toString() {
			return "VideoProcessorResult [code=" + code + ", msg=" + msg + ", newAddress=" + newAddress + "]";
		}
		
		
	}
	//获取处理结果
	public VideoProcessorResult getVideoProcessorResult() {
		return videoProcessorResult;
	}

}

内部类可以直接访问外部类中的成员,如下:

//处理视频信息,这里调用外部类方法
printVideo();
//直接访问外部类中的成员
videoProcessorResult = new VideoProcessorResult(1,"成功","视频新地址");

内部类通过以下方式可获取外部类对象的引用:

外部类名.this

所以上边代码中调用printVideo()方法也可以改为:

//内部类可获取外部类对象的引用
VideoProcessor.this.printVideo();

3)测试类

package com.pbteach.javase.oop.innerclass;

import com.pbteach.javase.oop.innerclass.VideoProcessor.VideoProcessorResult;

/**
 * 视频处理类测试
 * @author 攀博课堂
 * @version v1.0
 */
public class VideoProcessorTest {
	
	public static void main(String[] args) {
		//视频对象
		Video video = new Video("java多态原理解析", "avi", "http://www.pbteach.com/video/1");
		//视频处理器对象
		VideoProcessor videoProcessor = new VideoProcessor(video);
		//开始处理
		videoProcessor.process();
		//处理结果
		VideoProcessorResult videoProcessorResult = videoProcessor.getVideoProcessorResult();
		System.out.println(videoProcessorResult);
	}

}

运行,输出如下:

启动任务处理视频:java多态原理解析
VideoProcessorResult [code=1, msg=成功, newAddress=视频新地址]
提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题