内部类

一、什么是内部类?

不是明显定义出来的类,但又符合类的一些特征

二、 内部类

代码如下(示例):

package com.vetor.test;

public class Example7_1 {

	public static void main(String[] args) {
		RedCowForm form = new RedCowForm("红牛农场");
		form.showCowMess(); //类1里有方法 + 另一个类2方法  //方法的重叠
		form.cow.speak();  //类名1+类名2+内部类的方法  //类名的重叠

	}

}
package com.vetor.test;

public class  RedCowForm{
	static String forName;
	RedCow cow; //内部类声明对象
	RedCowForm() {
		
	}
	RedCowForm(String s) {
		cow = new RedCow(150,112,5000);
		forName = s;
	}
	public void showCowMess() {
		cow.speak();
	}
	class RedCow {  //内部类的声明
		String cowName = "红牛";
		int height,weight,price;
		RedCow(int h,int w,int p)
		{
			height = h;
			weight = w;
			price = p;
		}
		void speak() {
			System.out.println("偶是"+cowName+",身高:"+height+"cm体重:"+weight+"kg,生活在"+forName);
		}
		
	} //内部类结束
} //外嵌类结束

例题1

package com.vetor.test;

/*
 * 定义一个抽象类
 * 里面有一个输出的功能的方法 
 */
abstract class OutputAlphabet {
	public abstract void output();
}
/*
 * 抽象类的继承必须实现父类里的所有抽象方法
 * 重写方法功能:输出26英文字母
 */
class OutputEnglish extends OutputAlphabet {
	public void output() {
		for(char c = 'a';c<='z';c++) {
			System.out.printf("%3c",c);
		}
	}
	
}
/*
 * 方法的重叠
 * (类2的方法参数为类1的对象,在里面的调用类1的方法)
 */
class ShowBoard {
	void showMess(OutputAlphabet show) {
		show.output();
	}
}

public class Example7_2 {
	public static void main(String[] args) {
		
		//@情况1
		ShowBoard board = new ShowBoard();
		board.showMess(new OutputEnglish());
		/*
		 * 匿名对象
		 *new 一个地址值传进去,不再有接收的变量了,只使用一次较好用
		 *向参数传递OutputAlphabet的子类
		 *OutputEnglish对象
		 */
		//@情况2 
		//传递当前对象地址+要调用的方法,其实也就是说要调用的东西写进一个方法中
		board.showMess(new OutputAlphabet()
				{
					public void output() {
						for(char c = 'A';c<='Z';c++)
						{
							System.out.printf("%3c",c);
						}
					}
				}); //向参数传递OutputAlphabet的匿名子类的对象
		//这里我猜测:因为他想临时写一个东西,进行用的,用来临时或者是写一些小东西的
				
		
	}

}


例题2

package com.vetor.test;
//接口一个说的功能
interface SpeakHello {
	void speak();
}

//匿名类调用类
class HelloMachine {
	public void trunOn(SpeakHello hello) {
		hello.speak();
	}
}

public class Example7_3 {

	public static void main(String[] args) {
		HelloMachine machine = new HelloMachine();
		machine.trunOn(new SpeakHello()  //和接口SpeakHello有关的匿名类
				{
			public void speak() {
				System.out.println("hello,you are welcome!");
			}
				});
		
		machine.trunOn( new SpeakHello() {//和接口SpeakHello有关的匿名类
			public void speak() {
				System.out.println("你好,欢迎光临!");
			}
		});

	}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值