目录
1、辨析成员变量与方法参数的设计定义
- 定义长方形类,包含求周长和求面积的方法
- 定义数学工具类,包含求两个数的和的两倍和求两个数的积的方法
思考:这两个类的计算方法都需要两个数参与计算,那么两个数定义在成员位置还是形参位置更好
- 如果变量是该类的一部分,定义为成员变量
- 如果变量不是类的一部分,而仅仅是功能当中需要参与计算的数,则定义为形参变量
public class Rectangle {
private double x;
private double y;
public double getPerimeter(){
return (x+y)*2;
}
public double getArea(){
return x*y;
}
}
public class MathTool {
public static double getSum(double a, double b){
return (a+b)*2;
}
public static double getArea(double a, double b){
return a*b;
}
}
2、类作为方法参数与返回值
- 类作为方法参数
调用方法时,要接受的是一个类类型的参数,那么这时,要向方法中传入一个该类的对象
public class Person {
public void show(){
System.out.println("show方法执行了");
}
}
public class Demo{
public static void main(String[] args){
method(new Person());
}
public static void method(Person p){
p.show();
}
}
- 类作为返回值
调用方法时,要接受的是一个类类型的参数,那么这时,该方法要返回的是一个该类的对象
public class Person {
public void show(){
System.out.println("show方法执行了");
}
}
public class Demo{
public static void main(String[] args){
method(new Person());
Person p = new Person();
p.show();
}
public static Person method(){
return new Person();
}
}
3、抽象类作为方法参数与返回值
- 抽象类作为方法参数
当抽象类作为方法参数时,要传入的是一个实现了该抽象类所有抽象方法的子类对象。
abstract class Person {
public abstract void show();
}
class Student extends Person(){
public void show(){
System.out.println("重写了show方法");
}
}
public class Test{
public static void main(String[] args){
Person p = new Student();
method(p); // 传入的是实现了抽象类所有抽象方法的子类对象
}
public static void method(Person p){
p.show();
}
}
- 类作为返回值
当抽象类作为返回值时,该方法要返回的是一个实现了抽象类所有抽象方法的子类对象
abstract class Person {
public abstract void show();
}
class Student extends Person(){
public void show(){
System.out.println("重写了show方法");
}
}
public class Test{
public static void main(String[] args){
Person p = method(); //返回的的是实现了抽象类所有抽象方法的子类对象
p.show();
method(p);
}
public static Person method(){
Person p = new Student();
return (p);
// 或者直接使用匿名对象: return (new Student)
}
}
4、接口作为方法参数与返回值
- 接口作为方法参数
当接口作为方法参数时,该方法要传入一个接口的实现对象。
interface IPlay{
public abstract void smoking();
}
class Student implements IPlay{
public void playGame(){
System.out.println("下课玩游戏很开心");
}
}
public class Test{
public static void main(String[] args){
method(new Student()); // 传入的是一个实现了接口的类对象
}
public static void method(IPlay iPlay){
iPlay.playGame();
}
}
- 接口作为返回值
当接口类作为返回值时,该方法要返回的是一个接口的实现类对象
interface IPlay{
public abstract void smoking();
}
class Student implements IPlay{
public void playGame(){
System.out.println("下课玩游戏很开心");
}
}
public class Test{
public static void main(String[] args){
method(new Student()); // 传入的是一个实现了接口的类对象
}
public static void method(IPlay iPlay){
iPlay.playGame();
}
}
5、 星际酒店案例
某五星级酒店资金雄厚,需要招聘多名员工(经理、厨师、服务员)
入职的员工需要登记个人信息(姓名、工号、经理特有奖金属性)。员工都有自己的工作
需求:
- 获取酒店幸运员工
- 酒店开设VIP服务,酒店的厨师和服务员可以提供VIP服务。(厨师做菜加量、服务员给顾客倒酒)
- 编写测试类
- 在酒店中,增加多名员工(1名经理、1名厨师、2名服务员)
- 调用酒店员工的工作功能
- 调用酒店员工的VIP服务功能
- 抽取幸运员工
需求分析:
- 根据“某五星级酒店,...都有自己的工作要做。”分析出,该题目中包含酒店,员工,可以把它封装成类。
class 员工 {
属性:姓名,工号
方法:工作
}
class 经理 extends 员工 {
特有属性:奖金
}
class 厨师 extends 员工 {}
class 服务员 extends 员工 {}
- 根据“向酒店中,增加多名员工(其中,1名经理,1名厨师,2名服务员)”。分析出,要创建一个酒店对象,并添加4名员工到酒店对象的员工集合中。
酒店员工集合添加新员工:经理对象;
酒店员工集合添加新员工:厨师对象;
酒店员工集合添加新员工:服务员对象;
酒店员工集合添加新员工:服务员对象;
- 根据“获取酒店幸运员工”,分析出,从酒店员工集合随机得到一名员工对象。
1. 从酒店员工集合长度范围内,随机产生一个随机数
2. 使用该随机数作为集合的索引,返回索引处对应的员工对象
- 根据“酒店开设VIP服务,酒店的厨师和服务员可以提供VIP服务。(厨师做菜加量,服务员给顾客倒酒)”,分析出,这里需要增加一个VIP的接口,用来提供VIP服务的方法。让厨师和服务员去实现该接口
interface VIP服务 {
抽象方法:服务
}
class 厨师 extends 员工 implements VIP服务 {
重写服务方法
}
class 服务员 extends 员工 implements VIP服务 {
重写服务方法
}