Java-9 继承、封装、多态

继承(泛化):
    语法:
        <修饰符> class 子类名(派生类)   extends 父类名(超类、基类)
        {

        }

    作用:
        1.复用父类的所有非private属性与方法
        2.扩充自己的属性或方法

    注意:
       1.只允许单继承
          public class Worker extends Employee{}
       2.允许变相"多继承"
          public class Worker extends Employee{}
          public class Officer extends Worker{}

    此时,Officer可以复用Worker、Employee中所有的非private属性与方法

       3.Object是所有类的超级父类
       4.一个子类只允许有一个父类,一个父类可以有多个子类
       5.子类可以复用父类所有的非private的属性与方法

  子类实例化过程:
       先实例化父类,再实例化子类

super():
      作用:调用父类构造器
 注意:
     1.必须放在子类构造器,且放在第一行
     2.如果子类构造器没有显示声明super(),编译器默认添加在第一行super()
        如果父类中没有无参构造器,编译器报错
     3.super()中的参数决定调用父类的哪一个构造器

this():
    作用:调用本类的构造器

注意:
    只能写在构造器的第一行

super: 
    作用:表示父类的引用

this:
    作用:表示本类的引用

/**
 *  封装:隐藏属性、方法或实现细节的过程称为封装
 *      
 *      特点:
 *        1.属性私有化,用private修饰
 *        2.对外提供公有的get或set方法访问属性
 *      
 *      作用:
 *          1.隐藏类的实现细节
 *          2.让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作
            3.对数据进行检查

      访问权限修饰符: public protected (default) private

                        类修饰符: public  (default)
                        类成员修饰符: public protected (default) private

                       访问权限范围: public >  protected  >  (default) > private

     public:     同类、同包、不同包子类、不同包
     protected:  同类、同包、不同包子类
     (dafault):  同类、同包
     private:    同类 
  */

private int empno;
private String ename;
private double salary;

//set方法:赋值、传值
public void setEmpno(int empno)
{
    this.empno = empno;
}
//get方法:取值
public int getEmpno()
{
    return empno;
}
//set方法:赋值、传值
public void setEname(String ename)
{
    //3.对数据进行检查
    if(ename == null || "".equals(ename))
    {
        System.out.println("雇员姓名不能为空");
        return;
    }
    this.ename = ename;
}
//get方法:取值
public String getEname()
{
    return ename;
}
//set方法:赋值、传值
public void setSalary(double salary)
{
    //2.让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作
    if(salary < 1600)
    {
        System.out.println("您赋予的薪资不能低于最低薪资水平1600");
        return;
    }
    this.salary = salary;
}
//get方法:取值
public double getSalary()
{
    //1.隐藏类的实现细节
    return calTotalSal();
}
/**
 * 薪资核算的方法
 * @return
 */
private double calTotalSal()
{
    //薪水计算公式
    double totalSal = salary + (1000 + 1000*0.2 + 500);
    return totalSal;
}

/**
 *      多态:
 *          通过同一引用,调用同一方法,实现不同的功能
 * 
 *      多态三要素:
 *          1.基于继承或实现
 *          2.重写父类方法
 *          3.上溯造型(向上造型,子类转换父类)
 *          
 *          
 *  在停车场收费系统中,收费者会根据车型的不同收取不同的停车费,其中,
            客车:15元/小时
            货车:12元/小时
            轿车:8元/小时
            编写java程序完成此功能

 */

/*
 * 交通工具父类
 */
public class Vehicle {

/**
 * @param hour 停车时间(单位/小时)
 */
public void payFee(int hour)
{       }
}


/**
 * 客车:15元/小时
 */
public class Bus extends Vehicle {

//重写/覆盖
@Override   
public void payFee(int hour) {

    System.out.println("客车缴费(15元/小时): " + (15*hour));

}
}


/**
 * 轿车:8元/小时
 */
public class Car extends Vehicle {

//重写/覆盖
@Override   
public void payFee(int hour) {

    System.out.println("轿车缴费(8元/小时): " + (8*hour));

}
}



/**
 * 货车:12元/小时
 */
public class Truck extends Vehicle {

//重写/覆盖
@Override   
public void payFee(int hour) {

    System.out.println("货车缴费(12元/小时): " + (12*hour));

}
}

    /**
     * 收费
     */
    public void chargeFee(Vehicle v,int hour)
    {
        v.payFee(hour);
    }

public static void main(String[] args) {
    //创建停车场
    Parker parker = new Parker();

    //停车场收费
    parker.chargeFee(new Bus(), 3);
    parker.chargeFee(new Truck(), 1);
    parker.chargeFee(new Car(), 5);
}

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值