首页 > 试题广场 >

关于匿名内部类叙述正确的是? ( )

[单选题]

关于匿名内部类叙述正确的是? ( )


  • 匿名内部类可以继承一个基类,不可以实现一个接口
  • 匿名内部类不可以定义构造器
  • 匿名内部类不能用于实参
  • 以上说法都不正确
由于构造器的名字必须与类名相同,而匿名类没有类名,所以匿名类不能有构造器。
发表于 2017-06-07 09:19:38 回复(38)
匿名内部类的创建格式为: new 父类构造器(参数列表)|实现接口(){
                                             //匿名内部类的类体实现
                                        }
  1. 使用匿名内部类时,必须继承一个类或实现一个接口
  2. 匿名内部类由于没有名字,因此不能定义构造函数
  3. 匿名内部类中不能含有静态成员变量和静态方法
发表于 2017-07-23 15:58:46 回复(13)

在使用匿名内部类的过程中,我们需要注意如下几点:

      1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。

     2、匿名内部类中是不能定义构造函数的。

     3、匿名内部类中不能存在任何的静态成员变量和静态方法。

      4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。

     5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。


发表于 2018-07-05 09:29:37 回复(9)
发表于 2018-03-15 19:57:55 回复(0)
看了一些答案,对于正确答案B应该都没什么问题,名字都没有怎么有构造器?对于A,显然是可以实现接口的。对于C的话,是可以用于形参的,形参是我们定义一个方法时的参数,比如public void A(B b,new C(){
public int dd(){
return 1;}}),方法A中第二个参数就是类型为C的匿名内部类。这就是匿名内部类作为形参的形式。
发表于 2018-03-05 20:37:29 回复(5)
没有人解释 C 选项中的匿名内部类用于形参的问题,那么我就来解释一下吧 
abstract class Animal { 
     private String name; 
     public abstract void fly(); 
     public String getName(){ 
         return name; 
     } 
     public void setName(String name){ 
         this.name=name;
     } 
class Test{ 
     public static void main(String[] args) { 
         test(new Animal() { 
             private String name; 
             @Override 
             public void fly() {
                 System.out.println("可以飞"); 
             } 
             public String getName(){ 
                 return name; 
             } 
             public void setName(String name){ 
                 this.name=name; 
             } 
         }); 
     } 
     public static void test(Animal animal){ 
         animal.setName("鹦鹉"); 
         System.out.print(animal.getName()); 
         animal.fly(); 
     }
在Test类中,test()方法接受一个Animal类型的参数,同时我们知道一个抽象类是没有办法直接new的,所以要先有实现类才能new出来它的实现类实例。所以在mai()方法中直接使用匿名内部类来创建一个Animal实例。
编辑于 2020-02-09 17:47:41 回复(3)
使用匿名内部类时,有以下几个原则:
    1) 匿名内部类不能有构造函数。
    2) 匿名内部类不能定义静态成员、方法和类。
    3) 匿名内部类不能是public、protected、private、static。
    4) 只能创建匿名内部类的一个实例。
    5) 一个匿名内部类一定是在new的后面,这个匿名类必须继承一个父类或实现一个接口。
    6) 因为匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
发表于 2018-05-23 20:28:39 回复(1)
匿名内部类与整规类相比有些受限,因为匿名内部类既可以拓展类,也可以实现接口,但是不能两者兼备。而且如果是实现接口也只能实现一个接口。
发表于 2017-05-22 10:38:17 回复(0)
有关匿名内部类的知识点可以看以下图片:

编辑于 2019-10-21 16:50:28 回复(0)
都是看答案凑解释,就没有个解释匿名类没有名字, 怎么放在方法的形参
发表于 2018-01-01 20:23:34 回复(0)
匿名内部类,没有名字,所以没有构造方法
发表于 2021-10-31 20:49:17 回复(0)
匿名内部类,匿名了,没名字,构造器去哪找名字,即不能有构造函数
发表于 2017-06-13 15:24:36 回复(2)
请问在这里可以找到女朋友吗?
发表于 2019-12-10 19:35:44 回复(4)
由于构造器的名字必须与类名相同,而匿名类没有类名,所以匿名类不能有构造器。
发表于 2022-03-19 10:21:09 回复(0)

定义匿名内部类的格式如下:

       new 实现接口()||父类构造器(实参列表)

       {

    //匿名内部类的类体部分

};//注意这里有一个分号

1.匿名内部类不能是抽象类,因为系统在创建匿名内部类时,会立即创建匿名内部类的对象。因此不允许将匿名内部类定义为抽象类;

2.匿名内部类不能定义构造器。(注意:其他内部类可用有自己的构造器!!)由于匿名内部类没有类名,所以无法定义构造器,但匿名内部类可用定义初始化块,可以通过实例初始化块来完成构造器需要完成的事情。


发表于 2018-10-26 08:42:56 回复(0)
匿名内部类的举例: public class Test{ JButton jbt = new JButton(); jbt.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){} }); } 可见,直接通过new,只是一个指向,不是一种类型,没有类名。
发表于 2017-06-22 12:52:17 回复(1)
匿名内部类,就是没有名字的内部类。故没有构造器,必须调用基类的构造器。所以是继承基类的。
发表于 2020-10-02 16:41:44 回复(0)
答案C的例子: Arrays.sort()方法的第二个参数就可以传入一个匿名内部类去实现Comparator接口
发表于 2020-02-29 00:21:05 回复(2)
匿名内部类:
1.必须继承一个类或者实现一个接口,而且只能继承一个类和实现一个接口;
2.匿名内部类,没有类名称,无构造函数;
3.匿名内部类中不能有静态变量和静态方法;
发表于 2018-09-12 10:16:38 回复(0)

匿名内部类多用于外部类其中的属性非简单数据类型或者数据包装类型时,一种实现手段,可以使代码更紧凑,可以实现接口,也可以继承抽象类,但是不可能有构造函数,当做属性用即可

发表于 2018-08-06 13:33:04 回复(1)