原来我写的内部类是动态的,也就是开头以public class开头。而主程序是public static class main。在Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。所以在不做其他变动的情况下,最简单的解决办法是将public class改为public static class.
顺带着记录工厂模式的升级版:注意各个类局采用分开创建
package cn.factoryModel;
public class FactoryModelTest {
public static void main(String[] args) {
SendFactory factory = new SendFactory();
Sender sender = factory.produceMail();
sender.Send();
sender = factory.produceSms();
sender.Send();
return;
}
}
package cn.factoryModel;
public class SendFactory {
// 升级之前的代码是
// public Sender producer(String type) {
// if ("mail".equals(type)) {
// return new MailSender();
// } else if ("sms".equals(type)) {
// return new SmsSender();
// } else {
// System.out.println("请输入正确的类型:sms 或者 mail");
// return null;
// }
// }
//升级之后的代码 :提高了确定性 ,避免了输入类型的不匹配
public Sender produceMail (){
return new MailSender();
}
public Sender produceSms(){
return new SmsSender();
}
}
package cn.factoryModel;
public class MailSender implements Sender {
@Override
public void Send() {
System.out.println("this is mailsender!");
}
}
package cn.factoryModel;
public class SmsSender implements Sender{
@Override
public void Send() {
System.out.println("this is a smssender!");
}
}