Java抽象类、接口(例题及代码)

本文通过三个示例详细介绍了Java中的抽象类和接口的使用。首先,创建了一个抽象类Shape及其子类Circle和Rectangle,实现了计算图形面积的方法。接着,定义了一个IShape接口,由正方形类Square实现,展示接口的实现方式。最后,设计了工人、部门经理和销售人员类,探讨了类的继承、方法重写以及属性组合的应用。

1.编写一个抽象类Shape,声明计算图形面积的抽象方法。再分别定义Shape的子类Circle(圆)和Rectangle(矩形),在两个子类中按照不同图形的面积计算公式,实现Shape类中计算面积的方法。

public abstract class Sharp {
	public abstract double area();

	public Sharp() {
	}
}

class Circle extends Sharp {
	private double r;

	public Circle() {
		super();
	}

	public double getR() {
		return r;
	}

	public void setR(double r) {
		this.r = r;
	}

	@Override
	public double area() {
		// TODO Auto-generated method stub
		return Math.PI * r * r;
	}
}

class Rectangle extends Sharp {
	private double a, b;

	public Rectangle() {
		super();
	}

	public double getA() {
		return a;
	}

	public void setA(double a) {
		this.a = a;
	}

	public double getB() {
		return b;
	}

	public void setB(double b) {
		this.b = b;
	}

	@Override
	public double area() {
		// TODO Auto-generated method stub
		return a * b;
	}
}
public class Test {

	public static void main(String[] args) {
		Circle c = new Circle();
		c.setR(2);
		System.out.println(c.area());
		Rectangle re = new Rectangle();
		re.setA(4);
		re.setB(5);
		System.out.println(re.area());
	}
}

2.创建一个接口IShape,接口中有一个求取面积的抽象方法“public double area()”。定义一个正方形类Square,该类实现了IShape接口。Square类中有一个属性a表示正方形的边长,在构造方法中初始化该边长。定义一个主类,在主类中,创建Square类的实例对象,求该正方形对象的面积。

public interface ISharp {
	double area();
}
public class Square implements ISharp {
	private double a;

	public Square() {
		super();
	}

	public Square(double a) {
		super();
		this.a = a;
	}

	public double getA() {
		return a;
	}

	public void setA(double a) {
		this.a = a;
	}

	@Override
	public double area() {
		// TODO Auto-generated method stub
		return a * a;
	}
}
public class Test {

	public static void main(String[] args) {
		Square s = new Square();
		s.setA(4);
		System.out.println(s.area());
	}
}

3.创建一个工人类Worker
(1)工人类的属性:工龄、工号、姓名、基本工资 Phone phone String str
需要定义一个Phone类,属性:brand price
(2)输出所有信息的方法(包含手机的信息)
(3)定义一个输出工资的方法(工资=基本工资)
(4)创建一个部门经理类,继承工人Worker类,并重写其计算工资的方法
(工资=基本工资+岗位级别 * 500+工龄*1000)
添加属性Saler saler; 定义一个方法manager(){打印部门经理谁负责管理的是哪个销售人员,当月的销售金额是XX} 表示管理哪个销售人员
(5)创建一个销售人员类,继承工人Worker类,
并增加一个属性(销售金额)。
并重写其计算工资的方法
(工资=基本工资+销售金额 * 系数(*其中系数当销售金额大于100W时为0.09,小于100W时为0.08))
(6)创建测试类,分别定义Manager类的对象,并赋值,调用其输出工资的方法和manager方法进行测试。
在这里插入图片描述

public class Worker {
	private int year;
	private int num;
	private String name;
	private double money;
	private Phone phone;

	public Worker() {
		super();
	}

	public Worker(int year, int num, String name, double money, Phone phone) {
		super();
		this.year = year;
		this.num = num;
		this.name = name;
		this.money = money;
		this.phone = phone;
	}

	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		this.year = year;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getMoney() {
		return money;
	}

	public void setMoney(double money) {
		this.money = money;
	}

	public Phone getPhone() {
		return phone;
	}

	public void setPhone(Phone phone) {
		this.phone = phone;
	}

	public void printinfo() {
		System.out.println("工龄" + year + "年,工号" + num + ",姓名:" + name + ",基本工资" + money + "元,手機:" + phone.getBrand()
				+ "," + phone.getPrice() + "元");
	}
}
public class Phone {
	private String brand;
	private int price;

	public Phone() {
		super();
	}

	public Phone(String brand, int price) {
		super();
		this.brand = brand;
		this.price = price;
	}

	public String getBrand() {
		return brand;
	}

	public void setBrand(String brand) {
		this.brand = brand;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}
}
public class Manager extends Worker {
	private Saler saler;

	public Manager() {
		super();
	}

	public Manager(int year, int num, String name, double money, Phone phone, Saler saler) {
		super(year, num, name, money, phone);
		this.saler = saler;
	}

	public Saler getSaler() {
		return saler;
	}

	public void setSaler(Saler saler) {
		this.saler = saler;
	}

	public double money() {
		System.out.println(getMoney() + 500 + getYear() * 1000);
		return getMoney() + 500 + getYear() * 1000;
	}

	// 打印部门经理谁负责管理的是哪个销售人员,当月的销售金额是XX,表示管理哪个销售人员
	public void manage() {
		System.out.println(
				"部門經理:" + super.getName() + "負責銷售人員:" + saler.getName() + ",當月銷售金額是:" + saler.getSMoney() + "元");
	}
}
public class Saler extends Worker {
	private int SMoney;

	public Saler() {
		super();
	}

	public Saler(int year, int num, String name, double money, Phone phone, int sMoney) {
		super(year, num, name, money, phone);
		SMoney = sMoney;
	}

	public int getSMoney() {
		return SMoney;
	}

	public void setSMoney(int sMoney) {
		SMoney = sMoney;
	}

	// 工资=基本工资+销售金额*系数(其中系数当销售金额大于100W时为0.09,小于100W时为0.08)
	public double money() {
		if (SMoney >= 1000000) {
			System.out.println(getMoney() + SMoney * 0.09);
			return getSMoney() + SMoney * 0.09;
		} else
			System.out.println(getMoney() + SMoney * 0.08);
		return getSMoney() + SMoney * 0.08;
	}
}
public class Test {

	public static void main(String[] args) {
		Phone p1 = new Phone("IPhone", 8000);
		Phone p2 = new Phone("諾基亞", 2000);
		Worker s = new Saler(5, 201, "張三", 5000, p2, 1000000);
		Saler s1 = (Saler) s;
		Worker m = new Manager(10, 101, "李四", 8000, p1, s1);
		Manager m1 = (Manager) m;
		m.printinfo();
		s.printinfo();
		m1.manage();
	}
}
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值