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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁春龙 黑马帝   /  2011-7-15 19:59  /  3529 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

方法中定义的类是不是一定要实现某个接口?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

8 个回复

倒序浏览
黑马网友  发表于 2011-7-15 20:09:44
沙发
接口是一种特殊抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
回复 使用道具 举报
黑马网友  发表于 2011-7-15 20:11:41
藤椅
不用啊,这种东西如果自己不知道就在Eclipse里面敲一下就好了。[code]public class a1 {
        public static void main(String[] args) {
                class a {
                }
        }
}
class a {
        public void abc() {
                class b {
                }
                b b = new b();
        }
}[/code]很简单的~... 这不就说明不管是普通方法还是main方法里都可以写不实现接口的类了么。不知道,就试试看么~... Eclipse不报错,那就是能行~....

评分

参与人数 1技术分 +2 收起 理由
admin + 2 有理有据,答得好,加2分

查看全部评分

回复 使用道具 举报

回复 1 # 的帖子

楼主是看了面向对象(下)视频教程讲接口里面的那个例子么
interface PCI
{
        void start();
        void stop();
}
后面有一个地方是
class Assembler
{
        MainBoard mb = new MainBoard();  //class Mainboard的定义省略
        mb.usePCICard(new PCI()
        {
                public void start()
                {
                        System.out.println("test start");
                }
                public void stop()
                {
                        System.out.println("test stop");
                }
        }
        );
}

这里面mb.usePCICard(new PCI() { ..........}); 实际上是一个匿名内置类,相当于
class A implements PCI
{
        public void start();
        {
                System.out.println("test start");
        }
        public void stop();
        {
                System.out.println("test stop");
        }
}
mb.usePCICard(new A());

这种匿名类确实是要继承父类的, new PCI()实际上是new 了一个PCI的子类,后面的改写中A就是这个子类
但是这种匿名类只要是继承了一个父类就行,不一定非要实现一个接口。

如有错误,欢迎指出~~~
[ 本帖最后由 窦雪 于 2011-07-15  21:19 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 答得好!!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-15 22:13:14
报纸
不是必须的。使用内部类最吸引人的理由是:每个内部类都能独立的继承自一个(接口的)实现,所以,无论外部类是否已经集成了某个(接口的)实现,对于内部类都没有影响。可以解决java多继承问题。。
方法中的内部类也叫局部内部类,有的时候,你解决一个复杂的问题,想创建一个类来辅助你的解决方案,但是又不希望这个类是公共可用时也使用内部类。这时可以不用继承接口。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 加1分吧

查看全部评分

回复 使用道具 举报

回复 3 # 的帖子

要是你的class b里面还有一个方法 ,请问我该如何调用那个方法?

           public class Interior{  
                public static void main(String[] args){  
        //                A a = new A();
                }
        }
        class A{
                public void withOut(){
                        class B{
                                public void withIn(){
                                        System.out.println("Hello heima");
                                }
                        }
                        B b = new B();
                }
        }
[ 本帖最后由 袁春龙 于 2011-07-15  23:18 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 继续追问,对好学的童鞋要表示奖励!!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-16 15:45:02
7#

回复 6 # 的帖子

视频教程里有例子的
class Outer {
        private int size = 0;
        public class Inner {
                public void doStuff() {
                        System.out.println("++size");
                }
        }
}
public class TestInner{
        public static void main(String[] args) {
                Outer outer = new Outer();
                Outr.Inner inner = outer.new Inner();
                inner.doStuff();
        }
}

评分

参与人数 1技术分 +2 收起 理由
admin + 2 视频学习非常认真,好童鞋!!

查看全部评分

回复 使用道具 举报
王光保 黑马帝 2011-7-16 17:32:32
8#
不用的,但有一点非常重要就是方法中类不能访问外部类的局部变量。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 好像答得有点问题呢,局部变量声明为final就

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-17 02:00:16
9#
方法中的类,不就是内部类嘛,而且是局部内部类。和实现接口没什么关系。
楼上什么叫外部类的局部变量?外部类中的叫成员变量,方法中的才叫局部变量。
需要注意的是,局部内部类访问方法的局部变量时,只能访问final关键字修饰的

评分

参与人数 1技术分 +2 收起 理由
admin + 2 才看到你的,答出了我想说的,不错!!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马