public class Testjk {
public static void main(String[] args) {
//创建厨师对象
FoodMenu cooker1 = new ChinaCooker();
//创建顾客对象
Customer customer = new Customer(cooker1);
//顾客点菜
customer.order();
}
//菜单
public interface FoodMenu{
//西红柿炒鸡蛋
void shiZiChaoJiDan();
//鱼香肉丝
void yuXiangRouSi();
}
//中国厨师
//实现菜单上的菜
public class ChinaCooker implements FoodMenu{
//西红柿炒鸡蛋
public void shiZiChaoJiDan() {
System.out.println("中餐师傅做的西红柿炒鸡蛋");
}
//鱼香肉丝
public void yuXiangRouSi() {
System.out.println("中餐师傅做的鱼香肉丝");
}
}
//西餐厨师
//实现菜单上的菜
public class AmericCooker implements FoodMenu{
//西红柿炒鸡蛋
public void shiZiChaoJiDan() {
System.out.println("西餐师傅做的西红柿炒鸡蛋");
}
//鱼香肉丝
public void yuXiangRouSi() {
System.out.println("西餐师傅做的鱼香肉丝");
}
}
//顾客
public class Customer{
//顾客手里有一个菜单
private FoodMenu foodMenu;//已经私有化
//构造方法
public Customer() {
}
public Customer(FoodMenu foodMenu) {
this.foodMenu=foodMenu;
}
public void setFoodMenu(FoodMenu foodMenu) {
this.foodMenu = foodMenu;
}
public FoodMenu getFoodMenu() {
return foodMenu;
}
//提供一个点菜方法
public void order() {
//先拿到菜单
foodMenu.shiZiChaoJiDan();
foodMenu.yuXiangRouSi();
}
}
}
_**Exception in thread "main" java.lang.Error: 无法解析的编译问题:
没有任何类型 Testjk 的外层实例可访问。必须用类型 Testjk 的外层实例(例如,x.new A(),其中 x 是 Testjk 的实例)来限定分配。
at 接口.Testjk.main(Testjk.java:4)**_
main方法里new的时候加上Testjk.
new Testjk.ChinaCooker(),下面那个也是
内部类在静态方法内需要这样使用
public class Testjk {
public static void main(String[] args) {
//创建厨师对象
FoodMenu cooker1 = new ChinaCooker();
//创建顾客对象
Customer customer = new Customer(cooker1);
//顾客点菜
customer.order();
}
}//把最下面的括号挪到这里,Testjk到这里结束
//菜单
interface FoodMenu{
//西红柿炒鸡蛋
void shiZiChaoJiDan();
//鱼香肉丝
void yuXiangRouSi();
}
//中国厨师
//实现菜单上的菜
class ChinaCooker implements FoodMenu{
//西红柿炒鸡蛋
public void shiZiChaoJiDan() {
System.out.println("中餐师傅做的西红柿炒鸡蛋");
}
//鱼香肉丝
public void yuXiangRouSi() {
System.out.println("中餐师傅做的鱼香肉丝");
}
}
//西餐厨师
//实现菜单上的菜
class AmericCooker implements FoodMenu{
//西红柿炒鸡蛋
public void shiZiChaoJiDan() {
System.out.println("西餐师傅做的西红柿炒鸡蛋");
}
//鱼香肉丝
public void yuXiangRouSi() {
System.out.println("西餐师傅做的鱼香肉丝");
}
}
//顾客
class Customer{
//顾客手里有一个菜单
private FoodMenu foodMenu;//已经私有化
//构造方法
public Customer() {
}
public Customer(FoodMenu foodMenu) {
this.foodMenu=foodMenu;
}
public void setFoodMenu(FoodMenu foodMenu) {
this.foodMenu = foodMenu;
}
public FoodMenu getFoodMenu() {
return foodMenu;
}
//提供一个点菜方法
public void order() {
//先拿到菜单
foodMenu.shiZiChaoJiDan();
foodMenu.yuXiangRouSi();
}
}
改成这样试试
我的FoodMenu cooker1 = new ChinaCooker();这句话报错,也不知道哪里有问题
调用的代码在静态方法main里,访问非静态的内部类是不行的。
两种改法:
把下面的class定义改成静态的
public static class ChinaCooker implements FoodMenu
public static class Customer
把main方法里的代码挪到一个非静态的方法里,比如
public void test(){
//创建厨师对象
FoodMenu cooker1 = new ChinaCooker();
//创建顾客对象
Customer customer = new Customer(cooker1);
//顾客点菜
customer.order();
}
public static void main(String[] args) {
new Testjk().test();
}