搜索

首页  >  问答  >  正文

java - 在这儿并没有申明FU为Demo的父类,为什么还是可以继承重写呢

//此处用了匿名内中类
    abstract class Fu
    {
        public abstract void sleep();
    }
    class Demo
    {    
        public void fun()
        {
        //创建匿名对象,可以使用匿名类中类
            new Fu()
            {
            public void sleep()
                {
                System.out.println("睡觉");
                }
            public void eat()
                {
                System.out.println("吃饭");
                }
            
            }
            .sleep();
    //创建匿名对象
            new Fu()
            {
            public void sleep()
                {
                System.out.println("睡觉");
                }
            public void eat()
                {
                System.out.println("吃饭");
                }
            
            }
            .eat();
            
        }
    }
    class Demonmnbl1 
    {
        public static void main(String[] args) 
        {
            Demo de1 = new Demo();
            de1.fun();
        }
    }
迷茫迷茫2803 天前454

全部回复(3)我来回复

  • 天蓬老师

    天蓬老师2017-04-18 10:55:47

    又不是Demo重写,是里面的两个匿名子类重写的。。Demo只是负责调用

    回复
    0
  • 阿神

    阿神2017-04-18 10:55:47

    Demo并没有继承抽象类。 只是包含了Fu类的实例。

    没用过JAVA,抽象类怎么可能被实例化?这才是值得奇怪的地方。

    我感觉 new Fu()应该就相当于 something = new Fu(). 一个继承了Fu的匿名对象。这也就是OOP里的多态。

    回复
    0
  • 怪我咯

    怪我咯2017-04-18 10:55:47

    定义匿名内部类的时候,JVM会自动给你生成一个类,说是匿名,其实对于JVM来说,当然不是匿名,JVM知道这个类,而用户不知道,用户无法访问这个类,这个类是你new的类或接口的子类或实现类,它的引用是父类或接口。

    回复
    0
  • 取消回复