|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
今天是第24天,2017.07.28
① 匿名内部类
如果有临时继承某个类或操作接口并建立实例的需求,而这类子类或接口操作类只使用一次,不需要为这些类定义名称,这时可以使用匿名内部类来解决这个需求。
②匿名内部类的特点:
1.<没有名称,没办法引用>必须在创建时,作为new语句的一部分来声明并创建它们的实例。
2.<必须继承一个类或者实现一个接口>如果父类(或父接口)是抽象类,则匿名内部类必须实现其所有抽象方法。
3.匿名内部类可以定义代码块,用于实例的初始化,但不能定义静态代码块。
③匿名内部类的语法为:
new 父类|接口(){
//类本体操作
};
这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口,并同时创建该匿名类的一个新实例。
- public class AnonymousInnerClass {
- public static void main(String[] args) {
- Person p = new Person();
- // Animal dog=new Dog();
- // p.feed(dog);
- new Animal() {
- private String name="abl";
- /* static{
- name="ss";
- }Cannot make a static reference to the non-static field name*/
- public void eat() {
- System.out.println("啃骨头");
- }
- public void show() {
- System.out.println(name);
-
- }
- }.show();
- //p.feed(dog);
- //p.feed(dog);
- p.feed(new Animal() {
- public void eat() {
- System.out.println("吃鱼肉");
- }
- });
- }
- }
- class Person {
- public void feed(Animal animal) {
- animal.eat();
- }
- }
- interface Animal{
- public abstract void eat();
- }
- //abstract class Animal {
- // public abstract void eat();
- //}
- /*
- * class Dog extends Animal{
- * public void eat(){
- * System.out.println("啃骨头"); }
- * }
- */
复制代码
结果是——
abl
吃鱼肉
|
评分
-
查看全部评分
|