关于抽象类的实验(java 内部类、多态等练习)

综合案例(用户博客管理系统):

Team8(抽象类)
定义一个抽象的"Role"类 有姓名 年龄 性别等成员变量 
    1. 要求尽可能隐藏所有变量(能够私有就私有,能够保护就不要公有) 
    再通过GetXXX()和SetXXX()方法对各变量进行读写。具有一个抽象的play()方法 
    该方法不返回任何值 同时至少定义两个构造方法。Role类中要体现出this的几种用法。
    2. 从Role类派生出一个"Employee"类 该类具有Role类的所有成员 
    构造方法除外 并扩展 salary成员变量 同时增加一个静态成员变量“职工编号 ID ”。
    同样要有至少两个构造方法 要体现出this和super的几种用法 
    还要求覆盖play()方法 并提供一个final sing()方法。 
    3. "Manager"类继承"Employee"类 有一个final成员变量"vehicle" 
    4. 在main()方法中制造Manager和Employee对象,并测试这些对象的方法

{\color{Blue} }

package yxl;

abstract class Role {
    private String name;
    private int age;
    private String sex;
    public Role(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public Role(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    public abstract void play();
}

class Employee extends Role {
    private double salary;
    private static String ID;
    
    public Employee() {
        super("伊卡",20,"男");
        System.out.println("无参构造");
    }

    public Employee(String name,int age,String sex,double salary) {
        super(name,age,sex);
        this.salary = salary;
    }

    public void play() {
        System.out.println(super.getName()+"在快乐的玩着奥德赛");
    }
    public final void sing() {
        System.out.println(super.getName()+"吃着火锅唱着歌");
    }

}

class Manager extends Employee {
    public static final String vehicle = "Benz";
}



public class Control {
    public static void main(String[] args) {
        Role role = new Employee();
        role.play();
        Employee employee = (Employee) role;
        employee.sing();
        Manager manager = new Manager();
        System.out.println(Manager.vehicle);

    }
}

品尝饮料
1、建立一个Java抽象类Drink 应当 a、声明一个抽象方法taste() 该方法负责输出饮料的味道 b、声明int型常量来代表不同的饮料类型 咖啡、啤酒、牛奶 如 c、声明静态工厂方法getDrink(int drinkType) 根据传入的参数创建不同的饮料对象 并返回该对象 建议使用switch语句。该方法要求声明DrinkNotFoundException 当没有相对应的饮料类型时 抛出该异常。
2、建立Drink的具体子类 a、分别建立Drink的子类 Coffee 代表咖啡 Beer 代表啤酒 Milk 代表牛奶 ; b、实现taste()方法 要求在控制台打印各自的味道特征。
3、建立异常类DrinkNotFoundException a、继承Exception b、在Drink的 方 法getDrink(int drinkType)中 声 明 引 发DrinkNotFoundException异常 当传入的参数没有相对应的饮料类型时 抛出异常。 c、在使用getDrink方法的类中捕捉该异常。
4、建立Test测试类 测试以上内容的正确性 a、编写main方法 通过命令行传参的方式传入某种饮料的类型。 b、在main方法中 调用Drink类的getDrink方法 获得相应的饮料对象。注意捕获DrinkNotFoundException。 c、然后调用该饮料对象的taste()方法 输出该饮料的味道。
5、编译程序 并运行。
注意事项 1、仔细审题 把题目要求理解准确 2、请注意多态性的运用 3、请注意代码的书写、命名符合规范 应有适当的注释

package yxl;
import java.util.Scanner;
abstract class Drink {
	abstract void taste();
	int coffee,beer,milk;
	static int getDrink(int drinkType) throws DrinkNotFoundException{
		switch(drinkType) {
		case 1: System.out.print("coffee:");
				Coffee c=new Coffee();
				c.taste();
				break;
		case 2: System.out.print("beer:");
				Beer b=new Beer();
				b.taste();
				break;
		case 3: System.out.print("milk:");
				Milk m=new Milk();
				m.taste();
				break;
		default: throw new DrinkNotFoundException();
		}
	}
	class Fun extends Drink{
		void taste() {}
	}
	class DrinkNotFoundException extends Exception{}
	class Coffee{
		void taste() {
			System.out.println("haihaihai");
		}
		public void getDrink(int s) {
		}
	}
	class Beer{
		void taste() {
			System.out.println("not bad");}
		}
	class Milk{
		void taste() {
			System.out.println("how sweet you are!");
		}
	}
	public static void main(String[]args) {
		Coffee c=new Coffee();
		Beer b=new Beer();
		Milk m=new Milk();
		Fun f=new Fun();
		Scanner sc=new Scanner(System.in);
		try {
			int s=sc.nextInt();
			f.getDrink(s);
		}catch(Exception e) {
			System.out.println("mistake");
		}
	}

}

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值