A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

学到匿名内部类,结果视频五十几分种,看下来中间的知识点有点乱了,有没有整理过的,借来参考一下

7 个回复

倒序浏览
匿名内部类的格式
new 类名或者接口名(){
                        重写方法;
                }

很简单匿名内部类就是类中类而且这个类还没有名子

所以匿名内部类必须继承一个接口或者是抽象类。
class ccc{}
class xxx{
     final int a = 0;
    public void main{
         new ccc{
              System.out.print(a);
         }
    }
}
好处是 方便访问这个类的成员变量
但是切记加final修饰。如果是1.8版本的除外


至于匿名内部类怎么用?下面是一个例子
abstract class Person {
                        public abstract void show();
                }
       
                class PersonDemo {
                        public void method(Person p) {
                                p.show();
                        }
                }
       
                class PersonTest {
                        public static void main(String[] args) {
                                //如何调用PersonDemo中的method方法呢?
                                PersonDemo pd = new PersonDemo ();
                               
                        }
                }

###10.16_面向对象(匿名内部类的面试题)
* A:面试题
*
                按照要求,补齐代码
                interface Inter { void show(); }
                class Outer { //补齐代码 }
                class OuterDemo {
                        public static void main(String[] args) {
                                  Outer.method().show();
                          }
                }
                要求在控制台输出”HelloWorld”

知道这一题怎么做就说明你已经基本的理解了匿名内部类 和继承
明白继承和实现是理解匿名内部类的前提
回复 使用道具 举报
匿名内部类只能使用一次,它通常用来简化代码编写
但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口。
首先请看:不使用匿名内部类来实现抽象方法
abstract class Person {
    public abstract void eat();
}
 
class Child extends Person {
    public void eat() {
        System.out.println("eat something");
    }
}
 
public class Demo {
    public static void main(String[] args) {
        Person p = new Child();
        p.eat();
    }
}
运行结果:eat something
可以看到,我们用Child继承了Person类,然后实现了Child的一个实例,将其向上转型为Person类的引用

引入匿名内部类:
abstract class Person {
    public abstract void eat();
}
 
public class Demo {
    public static void main(String[] args) {
        Person p = new Person() {
            public void eat() {
                System.out.println("eat something");
            }
        };
        p.eat();
    }
}
运行结果:eat something
可以看到,我们直接将抽象类Person中的方法在大括号中实现了
这样就少写了一个类,简化了代码。


定义匿名内部类的前提:
        内部类必须是继承一个类或者实现接口。
匿名内部类的格式:
  new 父类或者接口()
{
定义子类的内容
}
回复 使用道具 举报
yuchun 发表于 2015-7-25 12:50
匿名内部类只能使用一次,它通常用来简化代码编写
但使用匿名内部类还有个前提条件:必须继承一个父类或实 ...

不够全面
回复 使用道具 举报
lizhichao 发表于 2015-7-25 12:34
匿名内部类的格式
new 类名或者接口名(){
                        重写方法;

你看是不是这样子:
interface Inter
{
       void show();
}
class Outer
{
       static Inter function()
       {
              return new Inter()
              {

}
       }
}
回复 使用道具 举报
lizhichao 发表于 2015-7-25 12:34
匿名内部类的格式
new 类名或者接口名(){
                        重写方法;

你看是不是这样子:
interface Inter
{
       void show();
}
class Outer
{
       static Inter method()
       {
              return new Inter()
              {
                      public void show()
                      {
                             System.out.println("Hello World!");
                      }
              };

       }
}
class OuterDemo
{
       public static void main(String[] args)
       {
               Outer.method().show();
       }
}
回复 使用道具 举报
春春 中级黑马 2015-7-28 08:57:38
7#
yuchun 发表于 2015-7-25 12:50
匿名内部类只能使用一次,它通常用来简化代码编写
但使用匿名内部类还有个前提条件:必须继承一个父类或实 ...

恩恩,现在清楚多了
回复 使用道具 举报
春春 中级黑马 2015-7-28 08:59:10
8#
春春 发表于 2015-7-28 08:49
你看是不是这样子:
interface Inter
{

写的下面的怎么没显示
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马