黑马程序员技术交流社区
标题:
覆盖权限问题?
[打印本页]
作者:
高鑫
时间:
2012-5-10 12:32
标题:
覆盖权限问题?
interface Inter
{
void method();
}
class Test
{
static Inter function()
{
return new Inter()
{
public void method()
{
System.out.println("yunxing");
}
};
}
}
class Demo
{
public static void main(String args[])
{
Test.function().method();
}
}
复制代码
问题,为什么11行必须加public,覆盖不是权限等于或大于就行吗,11行的void method()和第3行的void method()
不是权限一样的吗,都是void,为什么不加public就错了呢??
作者:
李啸
时间:
2012-5-10 12:36
你可知道接口中定义的方法都是用public abstract修饰的即使没有加修饰符 还是默认的public abstract 现在你在想一下
作者:
真真姐
时间:
2012-5-10 14:42
new Inne
{
public void method()
{
System.out.println("yunxing"); //相当于是Inner的子类实现了自己的方法,
}
};
1、 相当于是Inner的子类实现了自己的方法,
2、 接口中的方法默认的都是 public abstract
3、 子类重写的方法的访问权限不能低于基类的权限,所以只能是public
作者:
杨鹏
时间:
2012-5-10 19:49
因为Inter是一个接口,既然是接口那么它的成员就具有以下特点:
1、只有成员变量和成员方法。
2、成员变量 默认修饰符 public static final。
3、成员方法 默认修饰符 public abstract。比如:void show();其实就是public abstract void show();
建议:自己手动加上修饰符。
因为return new Inter(){};这代码即是要返回实现Inter接口的一个类匿名对象,所以Test类里面的匿名类重写Inter类的method()方法自然要加上public。
为了避免这种错误一般在写接口的时候都会把这些默认修饰符加上。
作者:
杨鹏
时间:
2012-5-10 19:50
因为Inter是一个接口,既然是接口那么它的成员就具有以下特点:
1、只有成员变量和成员方法。
2、成员变量 默认修饰符 public static final。
3、成员方法 默认修饰符 public abstract。比如:void show();其实就是public abstract void show();
建议:自己手动加上修饰符。
因为return new Inter(){};这代码即是要返回实现Inter接口的一个类匿名对象,所以Test类里面的匿名类重写Inter类的method()方法自然要加上public。
为了避免这种错误一般在写接口的时候都会把这些默认修饰符加上。
作者:
黑马-王建雨
时间:
2012-5-10 23:58
老贠如是说:接口省略了public 亲
作者:
陈忠
时间:
2012-5-11 01:55
你的问题里就出现了一个错误。void说的是无返回类型。即相当于系统默认的帮你加了一个无返回值的return;而不是修饰权限。
忽略这个, 你问题的答案上面一有了正解。
即接口中的方法都并需要被修饰为 public static。即使你写代码是没有写。系统依然会默认的帮你加上。所以在实现类的方法中
复写此方法时必须要加上public关键字
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2