精华内容
下载资源
问答
  • 最近遇到一个疑惑,为啥静态内部类可以继承非静态内部类理解呢?一查资料,都是千篇一律,都是对内部类的讲解,都不能直接找到这个疑惑的答案。请教了一些大神,最后明白了其中原委,这里做个记录,哪天又不清楚了...

    最近遇到一个疑惑,为啥静态内部类不可以继承非静态内部类理解呢?一查资料,都是千篇一律,都是对内部类的讲解,都不能直接找到这个疑惑的答案。请教了一些大神,最后明白了其中原委,这里做个记录,哪天又不清楚了可以用来看看。


    看图:



    如上图所以,要想new 非静态内部类,必须得有外部类的实例,我们都知道静态类、静态内部类、一切静态的东西都跟非静态无关系,因为虚拟机内存机制里面他们不在一个区域,

    那么,直接new 静态内部类是不需要借助外部类的实例的,但是这个静态内部类继承了一个非静态内部类,那么直接new 静态内部类就相当于new 非静态内部类,很显然这么做是不合法的。

    所以这样也就能理解这个疑惑了大笑

    展开全文
  • 匿名内部类可以继承其他类,但不能用extends。 可以实现某接口,但不能用implements。...匿名内部类经常用来覆盖基类的某些方法:class A{ public void a(){ System.out.orintln("甲"); } public void

    匿名内部类:
    可以继承其他类,但不能用extends。
    可以实现某接口,但不能用implements。

    匿名内部类,就是没有名字的内部类。故没有构造器,必须调用基类的构造器。所以是继承基类的。匿名内部类经常被用来覆盖基类的某些方法:

    class A{
        public void a(){
            System.out.orintln("甲");
        }
        public void b(){
            System.out.orintln("乙");
        }
    }
    
    public class B{
        public static A getA(){
            return new A(){
                public void a(){
                    System.out.println("丙");
                }
            }
        }
    }

    上面的例子,A类的a()方法打印“甲”,但B类的getA()方法返回的A类对象的引用,是打印“丙”的,因为a()方法被重写了。

    A myA = B.getA();
    myA.a(); //输出 丙
    myA.b(); //输出 乙

    由上面代码可知,A类明显就是匿名内部类的基类,因为它可以调用b()方法。

    所以匿名内部类必须继承自某个基类,但Java只接受单继承,所以就不可能再在后面加个extends 某个类。

    实现接口的情况同理可证 ,因为语法规定匿名内部类只能实现一个接口。

    展开全文
  • 一个匿名内部类一定是继承一个类或者实现一个接口,new了这个父类或接口名的内部类还带内容,我就想问能不能还能不能继承其他类或实现其他接口。 如果我表达不好,不好理解, 那问题简化就是 匿名内部类能不能...
  • 匿名的内部类是没有名字的内部类。不能继承其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

    匿名的内部类是没有名字的内部类。不能继承其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

    展开全文
  • Inner Class(内部类)定义在类中的类。 Nested Class(嵌套类)是静态(static)内部类。1. 要创建嵌套类的对象,并不需要其外围...匿名的内部类不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个
    Inner Class(内部类)定义在类中的类。 
    

    Nested Class(嵌套类)是静态(static)内部类。1. 要创建嵌套类的对象,并不需要其外围类的对象。 2. 不能从嵌套类的对象中访问非静态的外围类对象。

    Anonymous Inner Class (匿名内部类)匿名的内部类是没有名字的内部类。

    匿名的内部类不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

    嵌套类可以作为接口的内部类。正常情况下,你不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分,因为它是static 的。只是将嵌套类置于接口的命名空间内,这并不违反接口的规则。

    内部类被继承,由于内部类有一个指向外围类对象的秘密引用,所以在继承内部类的时候,该秘密引用必须被初始化。解决方法是enclosingClassReference.super();语法,看一下代码:

    class Outer
    {
         
    class Inner
          {
           }
    }
    class AnoClass extends Outer.Inner
    {
          AnoClass (Outer wi)
            
    {
                  wi.
    super();
             }
    }

    匿名类(Anonymous Class
      当一个内部类的类声名只是在创建此类对象时用了一次,而且要产生的新类需继承于一个已有的父类或实现一个接口,才能考虑用匿名类,由于匿名类本身无名,因此它也就不存在构造方法,它需要显示地调用一个无参的父类的构造方法,并且重写父类的方法。

    。。。。。。。。。。。。

    f.addMouseMotionListener(new MouseMotionAdapter(){ //匿名类开始
           public void mouseDragged(MouseEvent e){
            String s="Mouse dragging: x="+e.getX()+"Y="+e.getY();
            tf.setText(s); }
          } ); //匿名类结束

      存在它的原因是:
      1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。即内部类实例对包含它的哪个类的实例来说,是特权的。
      2.对于同一个包中的其他类来说,内部类能够隐藏起来,换句话说,内部类不管方法的可见性如何,那怕是public,除了包容类,其他类都无法使用它。
      3.匿名内部类可以很方便的定义回调。
      4.使用内部类可以非常方便的编写事件驱动程序。
    其实它真正的目的仅仅为了定义回调--进一步就是事件驱动。

     在使用匿名内部类时,要记住以下几个原则: 
      ·匿名内部类不能有构造方法。
       
      ·匿名内部类不能定义任何静态成员、方法和类。
       
      ·匿名内部类不能是public,protected,private,static
       
      ·只能创建匿名内部类的一个实例。
     
    ·
    一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
       
      ·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。  

    匿名类和内部类中的中的this :
    有时候,我们会用到一些内部类和匿名类。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。 这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名

     

    Part2:

    匿名内部类是没有名字的内部类,不能继承其它类,但一个内部类可以作为一个接口,由另一个内部类实现.
    一、由于匿名内部类没有名字,所以它没有构造函数。因为没有构造函数,所以它必须完全借用父类的构造函数来实例化,换言之:匿名内部类完全把创建对象的任务交给了父类去完成。

    二、在匿名内部类里创建新的方法没有太大意义,但它可以通过覆盖父类的方法达到神奇效果,如上例所示。这是多态性的体现。

    三、因为匿名内部类没有名字,所以无法进行向下的强制类型转换,持有对一个匿名内部类对象引用的变量类型一定是它的直接或间接父类类型。

    new <类或接口> <类的主体>

    匿名类

    匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。

    这就要采用另一种形式的new语句,如下所示:


    new <类或接口> <类的主体>

    这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。

    如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。

    注意匿名类的声明是在编译时进行的,实例化在运行时进行。这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。

    从技术上说,匿名类可被视为非静态的内部类,所以它们具有和方法内部声明的非静态内部类一样的权限和限制。

    如果要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能是所需的类过于简单,或者是由于它只在一个方法内部使用),匿名类就显得非常有用。匿名类尤其适合在Swing应用程序中快速创建事件处理程序。
    exp:
    return
    new Contents() {
    private int i = 11;
    public int value() { return i; }
    };

    这种奇怪的语法要表达的意思是:“
    创建从Contents衍生出来的匿名类的一个对象”。由new表达式返回的句柄会自动上溯造型成一个Contents句柄。匿名内部类的语法其实要表达的是:

    class MyContents extends Contents {
    private int i = 11;
    public int value() { return i; }
    }
    return new MyContents();
    若试图定义内部类,并想使用在匿名内部类外部定义的一个对象,则编译器要求外部对象必须是final属性.
    public class Parcel9 {
      public Destination
      dest(final String dest, final float price) {
        return new Destination() {
          private int cost;
          // Instance initialization for each object:
          {
            cost = Math.round(price);
            if(cost > 100)
              System.out.println("Over budget!");
          }
          private String label = dest;
          public String readLabel() { return label; }
        };
      }
      public static void main(String[] args) {
        Parcel9 p = new Parcel9();
        Destination d = p.dest("Tanzania", 101.395F);
      }
    }

     

    展开全文
  • 内部类继承自某个类或者实现某个接口,内部类可以访问创建它的外部类的对象或参数资源。内部类能独立的实现某个接口,无论外围类是否实现了这个接口。内部类使多重继承的解决方案变得更加完善。 下面的代码体现内部...
  • Java—内部类(三)—内部类继承

    万次阅读 多人点赞 2016-12-14 14:23:50
    内部类继承内部类和其他普通类一样,同样可以被继承,这样给本来就十分灵活的内部类增加了更好的结构性和代码复用性。只是内部类继承和普通类有一些不同之处,是在使用时需要多加注意的。因为内部类在创建时需要...
  • 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象方法 abstract class Person { public abstract void eat(); } class Child extends Person
  • 内部类实现多重继承

    千次阅读 2014-08-22 16:23:24
    多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承。有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需要...
  • C++类继承内部类实例

    千次阅读 2018-07-25 15:56:07
    类继承和内部类,以及内部类继承实例 先看tran.h文件 /* * train.h * * Created on: 2018年7月25日 * Author: admin */ #include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt...
  • 回答:匿名内部类在实现时必须借助一个借口或者一个抽象类或者一个普通类来构造,从这过层次上讲匿名内部类是实现了接口或者继承了类,但是不能通过extends或implement关键词来继承类或实现接口。 匿名内部类即...
  • 1. 匿名内部类总是默认实现某个接口或继承某个抽象类。 2.不能有构造方法,只能有一个实例。 3. 不能定义在任何静态成员、静态方法。 4. 不能是public.protected.private static. 5. 匿名内部类为局部的,所以...
  • 分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!...可以继承其他或实现其他接口,在Swing编程和Android开发中常用此方式来实现事件监听和回调。 ...
  • 本文的标题可能有一定的误导性,并不是说一般内部类就能实现多继承,显然这是不可能的。真正的意思是通过多继承来实现我们期望中的多继承的功能。 这里就拿人类来举例吧,人(Person)是一种生物(biology),而且是...
  • 枚举继承吗?能被继承吗?

    千次阅读 2019-07-19 00:38:25
    枚举的作用:限定“数据集”中...1.枚举也是,也可以有自己的成员变量,成员方法,静态方法、静态变量等,也能实现其他的接口,不能继承其他了(因为已经继承了java.lang.Enum)。枚举的对象默认都是public...
  • 怎样继承一个内部类

    千次阅读 2014-09-19 21:06:28
    定义一个内部类时,这个内部类会有一个隐式引用(implicit reference)指向外部类的实例。例如下面的代码: class WithInner { class Inner {} } 其实,内部类Inner默认会有一个带参数的构造函数,我们通过反射来...
  • java利用内部类实现多重继承

    千次阅读 2011-08-07 15:45:23
    利用内部类可以实现多重继承关系 : 如下: class D {} abstract class E{} class Z extends D { E makeE(){ return new E() {}; } } public class MultiImpleme
  • Java:使用内部类实现类的多重继承

    千次阅读 2012-03-06 22:42:12
    Java不支持类的多重继承,但可以...目标类C本身继承类A,并使用一个匿名内部类继承另一个类B。 MultiImplementation.java abstract class A {  abstract void methodA(); } abstract class B {  abstract void me
  •  通过匿名内部类的使用,我们可以方便地建立一个只能在此按钮中起作用的一个ActionListener接口的实现,这个实现只在该位置可用。  那么,能不能将这里的接口改为一个抽象类,甚至一个普通的类呢?看一下下面...
  • 一个关于匿名内部类的两个问题:匿名内部类能否继承其他的类 ?又能否实现接口?
  • Thread里面用内部类的写法 里面已经重写了run方法 外部类还需要继承Thread或实现runnable了吗?是不是不用继承接口或实现类了?直接可以实现线程了吧? ![图片说明]...
  • 匿名内部类必须继承一个父类或实现一个接口;不能继承其他的类,别的博文中一直写匿名内部类可以作为一个接口,由另一个内部类实现,完全不明白是什么意思,本人也没有实现这个功能,欢迎大神评论解答。...
  • java(四)内部类与多重继承

    千次阅读 2017-03-30 22:25:24
    内部类 定义:一个定义在类内部的类。
  • JAVA中内部类继承和覆盖问题

    千次阅读 2017-07-26 10:31:14
    JAVA的内部类继承与覆盖问题还是有一些细节方面需要注意的地方
  • 文章目录1 内部类的基本概念1.1 内部类的定义1.2 内部类的优缺点2 创建内部类2.1 在外部类外部创建非静态内部类2.2 在外部类外部创建静态内部类2.3 在外部类内部创建内部类语法3 内部类的分类3.1 成员内部类3.2 静态...
  • 匿名内部类是没有名字的内部类,不能实现其他类,但一个内部类可以作为一个接口,由另一个内部类实现

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 666,771
精华内容 266,708
关键字:

内部类可以被继承吗