有下列程序
Magic.java文件中
package t04;
public interface Magic
{
void useMagic();
}ActionCharacter.java文件中
package t04;
public class ActionCharacter
{
//构造了另一个保护类型的内部类,并继承了Magic接口
//构造保护类型的类的目的是为了在同一包中的其他类可以访问
protected class MagicHero implements Magic
{
private int mp;
MagicHero(int mp)
{
this.mp=mp;
this.useMagic();
}
public void useMagic()
{
System.out.println("创造出了一个mp为"+mp+"的智力型英雄,可以使用很多魔法");
}
}
//定义一个返回MagicHero的一个方法,该方法的返回类型Magic(MagicHero的父类)
public Magic createMagicHero(int mpValue)
{
return new MagicHero(mpValue);
}
}在测试类中下如下代码
Test.java文件中
package t04;
public class Test
{
public static void main(String args[])
{
//运行这句话就会出错
Magic magic_hero = new ac.createPowHero(1500);
}
}问题:
为什么用Magic magic_hero = new ac.createPowHero(1500);来构造MagicHero的对象就会出错?
MagicHero的类型是保护类型的,那么在同一个包中是可以被访问的。为什么这样做是不行的?
Magic.java文件中
package t04;
public interface Magic
{
void useMagic();
}ActionCharacter.java文件中
package t04;
public class ActionCharacter
{
//构造了另一个保护类型的内部类,并继承了Magic接口
//构造保护类型的类的目的是为了在同一包中的其他类可以访问
protected class MagicHero implements Magic
{
private int mp;
MagicHero(int mp)
{
this.mp=mp;
this.useMagic();
}
public void useMagic()
{
System.out.println("创造出了一个mp为"+mp+"的智力型英雄,可以使用很多魔法");
}
}
//定义一个返回MagicHero的一个方法,该方法的返回类型Magic(MagicHero的父类)
public Magic createMagicHero(int mpValue)
{
return new MagicHero(mpValue);
}
}在测试类中下如下代码
Test.java文件中
package t04;
public class Test
{
public static void main(String args[])
{
//运行这句话就会出错
Magic magic_hero = new ac.createPowHero(1500);
}
}问题:
为什么用Magic magic_hero = new ac.createPowHero(1500);来构造MagicHero的对象就会出错?
MagicHero的类型是保护类型的,那么在同一个包中是可以被访问的。为什么这样做是不行的?
createPowHero(int) 是在哪定义的?
public Test() {
}
public static void main(String args[]) {
ActionCharacter ac = new ActionCharacter();
Magic magic_hero = ac.createMagicHero(1500);
}
}
Resule:
创造出了一个mp为1500的智力型英雄,可以使用很多魔法
BUILD SUCCESSFUL (total time: 0 seconds)
for example:
Point2D p=new Point2D.Float();
Point2D p=new Point2D.Double();
不是访问不了,是你没有建立一个外部类的对象,所以无法访问,因此你必须先建立一个外部类的对象,就像下面:
ActionCharacter ac = new ActionCharacter();
Magic magic_hero = new ac.createPowerHero(1500);
如果你想创建一个内部类(不是嵌套类)对象,那么你必须首先创建一个包含这个内部类的外围的类的对象,就想你的class ActionCharacter,你必须创建一个这个类的对象,ActionCharacter ac = new ActionCharacter(); 然后通过ac调用方法创建,就象你的程序那样。
你的程序是没有定义ac。
但是你也不能这样创建:Magic magic_hero=new ActionCharacter.MagicHero();
这样也会错误的,因为你要创建一个内部类的对象,你必须有一个外围类的对象创建它。
Magic magic_hero = new ActionCharacter().createPowHero(1500);
你说的那个protected和这个没有什么关联,因为你是用函数反回的引用,估计楼主把静态内部类和内部类弄混淆了
静态内部类主要是为了信息的隐藏。
内部类的哲学一下说不清
{
}哈哈哈哈...吖。啥人都 有
然后你调用的方法名有错误!
再有你运行的时候必须在t04的上级目录
然后调用java t04.Test