内部类,匿名内部类的使用

package com.yc.dao.UserTest;

public class Test {
private int a=100;
public int b=200;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public static void main(String args[]) {
// Test t=new Test();
// t.b=3;
// System.out.println(t.b);
// System.out.println(t.a);//可以使用调用
//

//******************************************************************
//匿名内部类的使用
cook p=new cook() {

	@Override
	public void rich() {
		System.out.println("做饭**********");
	}
	public void say() {// 匿名内部类自定义的方法say
		System.out.println("say方法调用");
	}
};
p.rich();	//能调用
//p.say();//不能调用,应为匿名内部类没用名字,不能实例化对象只能借助父类去调用,如果想用自己的方法只能在父类中定义自己去实现;

// p.run();//抽象类能自行实现方法;但是不能实例化对象,必须被继承;

write w=new write() {

	@Override
	public void write() {//匿名内部类实现接口的方法
		// TODO Auto-generated method stub
		System.out.println("写作业");
	}
	
};
}

}

//class a {
// public static void main(String args[]) {
// Test t=new Test();
// // System.out.println(t.b);
// System.out.println(t.a);//会报错,private 只能在同一类中使用
//}
//}

abstract class cook{
public abstract void rich() ;
public void run() {
System.out.println(“run*************”);
}

}
interface write {
public void write();

}

什么情况下使用内部类?
典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外层类的对象。所以你可以认为内部类提供了某种进入其外层类的窗口。
使用内部类最吸引人的原因是:每个内部类都能独立地继承自一个(接口的)实现,所以无论外层类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。

 -------------------- 

作者:pan_jinquan
来源:CSDN
原文:https://blog.csdn.net/guyuealian/article/details/51981163
版权声明

在这里插入图片描述
匿名内部类
匿名内部类也就是没有名字的内部类正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写,但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口,但最多只能继承一个父类,或实现一个接口。
关于匿名内部类还有如下两条规则:
1)匿名内部类不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建内部类的对象。因此不允许将匿名内部类定义成抽象类。
2)匿名内部类不等定义构造器(构造方法),因为匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以定义实例初始化块,
怎样判断一个匿名类的存在啊?看不见名字,感觉只是父类new出一个对象而已,没有匿名类的名字。
先看段伪代码

在这里插入图片描述
一般来说,new 一个对象时小括号后应该是分号,也就是new出对象该语句就结束了。但是出现匿名内部类就不一样,小括号后跟的是大括号,大括号中是该new 出对象的具体的实现方法。因为我们知道,一个抽象类是不能直接new 的,必须先有实现类了我们才能new出它的实现类。上面的伪代码就是表示new 的是Father的实现类,这个实现类是个匿名内部类。
其实拆分上面的匿名内部类可为:
在这里插入图片描述

发布了23 篇原创文章 · 获赞 8 · 访问量 1403

猜你喜欢

转载自blog.csdn.net/lin1214000999/article/details/96137783