Java面向对象高级部分——抽象类(十六)

本文通过一个Java编程示例解释了抽象类和抽象方法的概念。示例中,`Employee`类被声明为抽象类,包含抽象方法`salaryUp()`,并有两个子类`SalerEmp`和`TecEmp`分别根据销售业绩和工程师等级实现不同的薪资提升逻辑。这个例子展示了如何利用抽象类和抽象方法进行面向对象编程,以及子类如何覆盖抽象方法以实现具体功能。
摘要由CSDN通过智能技术生成

抽象类:在java当中使用abstract修饰的类就是一个抽象类。

抽象方法:使用abstract修饰的方法就是抽象方法,一旦一个类拥有了一个抽象方法。就必须定义为抽象类。抽象方法只需要声明,不需要方法体。

抽象类和普通类的区别:普通的类中没有抽象方法,普通的类中所有的定义都可以在抽象类中使用。

抽象类的使用规则:

      ·抽象类本身不能够直接实例化

      ·抽象类的抽象方法不需要实现,只需要声明。

      ·含有抽象方法的类必须声明为抽象类

      ·抽象类必须要有子类,否则抽象类将失去意义。抽象类的子类必须覆写抽象类中全部的抽象方法。

问题:

           ·抽象可以有构造方法?(是要有构造方法的)

           ·抽象类可以用final声明吗?(因为用final修饰的类不能用子类,所以与抽象类必须有子类相悖,所以答案是否)

举例:

     一个公司有销售员工,也有技术员工,有不同的提升薪资的方法,销售员工安置上一年销售业绩来提升工资,业绩如果大于100w,提升20%,业绩在50w到100w之间的提升10%,在30w到50w之间提升5%,低于30%不提升。对于技术人员,按照等级来提升工资,初级工程师20%,中级10%,高级5%。

package obc10;

public abstract class Employee {
      private double salary;

	public Employee() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Employee(double salary) {
		super();
		this.salary = salary;
	}

	public double getSalary() {
		return salary;
	}

	public void setSalary(double salary) {
		this.salary = salary;
	}
    
	public abstract void salaryUp();
}
package obc10;

public class OopDemo01 {
    public static void main(String[] args) {
		Employee e=new SalerEmp(2000.0,58);
		e.salaryUp();
		Employee e1= new TecEmp(3000.0,"初级工程师");
		e1.salaryUp();
	}
}
package obc10;

public class SalerEmp extends Employee {
    private int saleSum;
    
	public int getSaleSum() {
		return saleSum;
	}

	public void setSaleSum(int saleSum) {
		this.saleSum = saleSum;
	}

	
	public SalerEmp() {
		super();
		// TODO Auto-generated constructor stub
	}

	public SalerEmp(double salary) {
		super(salary);
		// TODO Auto-generated constructor stub
	}

	public SalerEmp(int saleSum) {
		super();
		this.saleSum = saleSum;
	}

	public SalerEmp(double salary,int saleSum){
		super(salary);
		this.saleSum=saleSum;
	}
	@Override
	public void salaryUp() {
		double salary_now = super.getSalary();//取得当前工资
		if(this.getSaleSum()>=100){
			System.out.println("现在的工资为:"+salary_now+"提升后的工资为:"+salary_now*1.2);
		}else if(this.getSaleSum()>=50){
			System.out.println("现在的工资为:"+salary_now+"提升后的工资为:"+salary_now*1.1);
		}else if(this.getSaleSum()>=30){
			System.out.println("现在的工资为:"+salary_now+"提升后的工资为:"+salary_now*1.05);
		}else{
			System.out.println("现在的工资为:"+salary_now+"提升后的工资为:"+salary_now);
		}

	}

}
package obc10;

public class TecEmp extends Employee {
    private String post;
    
	public String getPost() {
		return post;
	}

	public void setPost(String post) {
		this.post = post;
	}

	public TecEmp() {
		super();
		// TODO Auto-generated constructor stub
	}

	public TecEmp(double salary) {
		super(salary);
		// TODO Auto-generated constructor stub
	}

	public TecEmp(double salary,String post){
		super(salary);
		this.post=post;
		
	}
	@Override
	public void salaryUp() {
		double salary_now = super.getSalary();//取得当前工资
		if(this.getPost().equals("初级工程师")){
			System.out.println("现在的工资为:"+salary_now+"提升后的工资为:"+salary_now*1.2);
		}else if(this.getPost().equals("中级工程师")){
			System.out.println("现在的工资为:"+salary_now+"提升后的工资为:"+salary_now*1.1);
		}else if(this.getPost().equals("高级工程师")){
			System.out.println("现在的工资为:"+salary_now+"提升后的工资为:"+salary_now*1.05);
		}

	}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毛栗子201105

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值