抽象类:在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);
}
}
}