Java程序基础——自定义类型的使用

目录

1、辨析成员变量与方法参数的设计定义

2、类作为方法参数与返回值

3、抽象类作为方法参数与返回值 

4、接口作为方法参数与返回值 

5、 星际酒店案例


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名经理、1名厨师、2名服务员)
  2. 调用酒店员工的工作功能
  3. 调用酒店员工的VIP服务功能
  4. 抽取幸运员工

需求分析:

  • 根据“某五星级酒店,...都有自己的工作要做。”分析出,该题目中包含酒店,员工,可以把它封装成类。
   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服务 {
       重写服务方法
   }
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值