学习任务:

视频学习

动手测试代码

什么情况下定义内部类?

基于目前所学习的成员内部类的知识,以下情况会定义内部类:

1)为了隐藏并控制对这个类的访问

将内部类修饰为private,内部类就只能在外部类中去使用,在外部类以外不可见。

2)为了将一个类定义在另一个类的内部

当一个类依托另一个类而存在,无需单独定义java文件,可以将其定义为内部类。

3)借助内部类实现多继承

Java是单继承语言,即一个类最多继承一个父类,如果每个内部类也继承一个父类,这样就间接实现了多继承,如下例子:

定义ProcessorResult处理结果父类

package com.pbteach.javase.oop.innerclass;

/**
 * 处理结果父类
 * @author 攀博课堂
 * @version v1.0
 */
public class ProcessorResult {
	
	//结果代码,1表示成功,0表示失败
	private int code;
	//失败信息
	private String msg;
	
	public ProcessorResult(int code,String msg) {
		this.code = code;
		this.msg = msg;
	}

	public int getCode() {
		return code;
	}

	public String getMsg() {
		return msg;
	}

}

定义处理器基础类:

package com.pbteach.javase.oop.innerclass;

/**
 * 处理器基础类
 * @author 攀博课堂
 * @version v1.0
 */
public abstract class Processor {
	
	public abstract void process();
	
}

视频处理类继承处理器基础类,视频处理结果类继承处理结果基础类

package com.pbteach.javase.oop.innerclass;


/**
 * 视频处理器
 * @author 攀博课堂
 * @version v1.0
 */
public class VideoProcessor2 extends Processor {
	
	//视频
	private Video video;
	
	//处理结果
	private VideoProcessorResult videoProcessorResult;
	
	public VideoProcessor2(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();
			//内部类可获取外部类对象的引用
			VideoProcessor2.this.printVideo();
			//直接访问外部类中的成员
			videoProcessorResult = new VideoProcessorResult(1,"成功","视频新地址");
		}
		//终止任务
		public void cancel() {
			System.out.println("终止任务");
			
		}
	}
	//处理结果
	
	public class VideoProcessorResult extends ProcessorResult{
		
		//视频新地址
		private String newAddress;
		
		public VideoProcessorResult(int code,String msg,String newAddress) {
			super(code, msg);
			this.newAddress = newAddress;
		}

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

}

提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题