本文目录导读:

我来通过几个具体的案例来说明Java抽象类的定义和使用。
案例1:动物抽象类
// 定义抽象类
public abstract class Animal {
// 普通属性
protected String name;
protected int age;
// 构造方法
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
// 抽象方法(没有方法体)
public abstract void makeSound();
// 抽象方法
public abstract void move();
// 普通方法(有方法体)
public void sleep() {
System.out.println(name + "正在睡觉");
}
// 获取信息
public void displayInfo() {
System.out.println("动物名称: " + name + ", 年龄: " + age);
}
}
// 子类:狗
class Dog extends Animal {
public Dog(String name, int age) {
super(name, age);
}
// 实现抽象方法
@Override
public void makeSound() {
System.out.println(name + "汪汪叫");
}
@Override
public void move() {
System.out.println(name + "用四条腿奔跑");
}
}
// 子类:猫
class Cat extends Animal {
public Cat(String name, int age) {
super(name, age);
}
@Override
public void makeSound() {
System.out.println(name + "喵喵叫");
}
@Override
public void move() {
System.out.println(name + "轻盈地行走");
}
}
// 测试类
public class AnimalTest {
public static void main(String[] args) {
// 错误:不能实例化抽象类
// Animal animal = new Animal("动物", 1);
// 正确:通过子类实例化
Animal dog = new Dog("旺财", 2);
Animal cat = new Cat("小花", 1);
dog.displayInfo();
dog.makeSound();
dog.move();
dog.sleep();
System.out.println("----------------");
cat.displayInfo();
cat.makeSound();
cat.move();
}
}
案例2:图形计算器
// 抽象类:图形
public abstract class Shape {
protected String color;
public Shape(String color) {
this.color = color;
}
// 抽象方法:计算面积
public abstract double calculateArea();
// 抽象方法:计算周长
public abstract double calculatePerimeter();
// 普通方法
public void display() {
System.out.println("这是一个" + color + "色的图形");
System.out.println("面积: " + calculateArea());
System.out.println("周长: " + calculatePerimeter());
}
}
// 圆形
class Circle extends Shape {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
@Override
public double calculateArea() {
return Math.PI * radius * radius;
}
@Override
public double calculatePerimeter() {
return 2 * Math.PI * radius;
}
}
// 矩形
class Rectangle extends Shape {
private double length;
private double width;
public Rectangle(String color, double length, double width) {
super(color);
this.length = length;
this.width = width;
}
@Override
public double calculateArea() {
return length * width;
}
@Override
public double calculatePerimeter() {
return 2 * (length + width);
}
}
// 三角形
class Triangle extends Shape {
private double sideA;
private double sideB;
private double sideC;
public Triangle(String color, double sideA, double sideB, double sideC) {
super(color);
this.sideA = sideA;
this.sideB = sideB;
this.sideC = sideC;
}
@Override
public double calculateArea() {
// 海伦公式
double s = (sideA + sideB + sideC) / 2;
return Math.sqrt(s * (s - sideA) * (s - sideB) * (s - sideC));
}
@Override
public double calculatePerimeter() {
return sideA + sideB + sideC;
}
}
// 测试类
public class ShapeTest {
public static void main(String[] args) {
Shape circle = new Circle("红色", 5);
Shape rectangle = new Rectangle("蓝色", 4, 6);
Shape triangle = new Triangle("绿色", 3, 4, 5);
circle.display();
System.out.println("----------------");
rectangle.display();
System.out.println("----------------");
triangle.display();
}
}
案例3:员工管理系统
// 抽象类:员工
public abstract class Employee {
protected String employeeId;
protected String name;
protected double baseSalary;
public Employee(String employeeId, String name, double baseSalary) {
this.employeeId = employeeId;
this.name = name;
this.baseSalary = baseSalary;
}
// 抽象方法:计算工资(不同职位计算方式不同)
public abstract double calculateSalary();
// 抽象方法:工作职责
public abstract void workDuties();
// 普通方法
public void displayInfo() {
System.out.println("员工ID: " + employeeId);
System.out.println("姓名: " + name);
System.out.println("基本工资: " + baseSalary);
System.out.println("实际工资: " + calculateSalary());
}
}
// 经理类
class Manager extends Employee {
private double bonus;
public Manager(String employeeId, String name, double baseSalary, double bonus) {
super(employeeId, name, baseSalary);
this.bonus = bonus;
}
@Override
public double calculateSalary() {
return baseSalary + bonus;
}
@Override
public void workDuties() {
System.out.println(name + "负责:管理团队,制定策略,分配任务");
}
}
// 程序员类
class Programmer extends Employee {
private int projectCount;
private double projectBonus;
public Programmer(String employeeId, String name, double baseSalary,
int projectCount, double projectBonus) {
super(employeeId, name, baseSalary);
this.projectCount = projectCount;
this.projectBonus = projectBonus;
}
@Override
public double calculateSalary() {
return baseSalary + (projectCount * projectBonus);
}
@Override
public void workDuties() {
System.out.println(name + "负责:编写代码,调试程序,参与项目开发");
}
}
// 销售员类
class Salesman extends Employee {
private double salesAmount;
private double commissionRate;
public Salesman(String employeeId, String name, double baseSalary,
double salesAmount, double commissionRate) {
super(employeeId, name, baseSalary);
this.salesAmount = salesAmount;
this.commissionRate = commissionRate;
}
@Override
public double calculateSalary() {
return baseSalary + (salesAmount * commissionRate);
}
@Override
public void workDuties() {
System.out.println(name + "负责:销售产品,拓展客户,达成销售目标");
}
}
// 测试类
public class EmployeeTest {
public static void main(String[] args) {
Employee manager = new Manager("M001", "张三", 10000, 5000);
Employee programmer = new Programmer("P001", "李四", 8000, 3, 1000);
Employee salesman = new Salesman("S001", "王五", 5000, 50000, 0.1);
System.out.println("=== 员工信息 ===");
manager.displayInfo();
manager.workDuties();
System.out.println("----------------");
programmer.displayInfo();
programmer.workDuties();
System.out.println("----------------");
salesman.displayInfo();
salesman.workDuties();
}
}
抽象类的关键特点
- 不能实例化:不能直接创建抽象类的对象
- 可以包含抽象方法和普通方法
- 子类必须实现所有抽象方法(除非子类也是抽象类)
- 可以有构造方法:用于子类的super()调用
- 可以有成员变量、常量、静态方法
使用抽象类的场景
- 当多个类具有共同的行为特征,但具体实现不同时
- 当你想强制子类实现某些方法时
- 当你想提供部分实现,同时留一些方法供子类扩展时
这些案例展示了抽象类在实际开发中的典型应用,帮助你理解如何定义和使用Java抽象类。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播