继承(泛化):
语法:
<修饰符> 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);
}