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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© panzhenglian 中级黑马   /  2013-12-19 10:46  /  1358 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 panzhenglian 于 2013-12-19 11:49 编辑

  1. public class pan{
  2.         public static void main(String[] args){
  3.                 demo de=new demo();
  4.                 de.fan();
  5.                
  6.         }
  7. }
  8. class demo
  9. {
  10.         int a=4;
  11.         public void fan(){
  12.                 new absdemo(){
  13.                         void show(){
  14.                                 System.out.println("a="+a);
  15.                         }
  16.                 }.show();
  17.         }
  18. }
  19. interface absdemo{
  20.         void show();
  21. }
复制代码
这个和毕老师的讲课时的内部类的匿名对象一样,可是运行会报错,而毕老师写完这段代码把一帮同学搞晕了自己也没有运行

6 个回复

倒序浏览
接口默认的方法时public
你复写show()时方法修饰符默认的 权限小于public 肯定报错,加个public就好了
回复 使用道具 举报
1、你只是创建了一个外部类的对象调用外部类的成员方法,但是,此时,内部类位于外部类的成员方法内,你并没有创建对象去调用show()方法;
2、想要执行成功,需要做的就是创建内部类的对象,调用内部类中的方法;
class demo

{

        int a=4;

        public void fan(){

                new absdemo(){

                        void show(){

                                System.out.println("a="+a);

                        }

                }
                        new absdemo().show();

        }

}
public class pan{

        public static void main(String[] args){

                demo de=new demo();

                de.fan();

               

        }

}
回复 使用道具 举报 0 1
本帖最后由 panzhenglian 于 2013-12-19 11:33 编辑
zzkang0206 发表于 2013-12-19 11:24
1、你只是创建了一个外部类的对象调用外部类的成员方法,但是,此时,内部类位于外部类的成员方法内,你并 ...

这是创建匿名类对象,方法就在匿名类的后面,二楼是对的,我忽略了接口的默认属性
回复 使用道具 举报
本帖最后由 panzhenglian 于 2013-12-19 11:53 编辑
四五六七八 发表于 2013-12-19 11:18
接口默认的方法时public
你复写show()时方法修饰符默认的 权限小于public 肯定报错,加个public就好了 ...

谢谢啊,是我忽略了接口的默认属性,还以为老师大意了呢,
不懂如何设置问题已经解决,不好意思了

接口中成员的修饰符是固定的,

成员常量----->public  static final
成员函数----->public abstract

这次增加印象了
回复 使用道具 举报
  1. public class Demo8{
  2.         public static void main(String[] args){
  3.                 demo de=new demo();
  4.                 de.fan();
  5.                
  6.         }
  7. }
  8. class demo
  9. {
  10.         int a=4;
  11.         public void fan(){
  12.                 new absdemo(){
  13.                        public void show(){//这里加public
  14.                                 System.out.println("a="+a);
  15.                         }
  16.                 }.show();
  17.         }
  18. }
  19. interface absdemo{
  20.         void show();
  21.           }
复制代码
回复 使用道具 举报 1 0
yjgoss 中级黑马 2013-12-19 12:35:13
7#
你得加public 正确代码
09.class demo

10.{

11.        int a=4;

12.        public void fan(){

13.                new absdemo(){

14.                       public  void show(){

15.                                System.out.println("a="+a);

16.                        }

17.                }.show();

19.interface absdemo{

20.        void show();

21.          }
02.public class pan{

03.        public static void main(String[] args){

04.                demo de=new demo();

05.                de.fan();



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