一、什么是内部类?
不是明显定义出来的类,但又符合类的一些特征
二、 内部类
代码如下(示例):
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("你好,欢迎光临!");
}
});
}
}