1.当一个类中给出的信息不够全面时,(比方说有无法确定的行为),它给出的信息不足以描绘出一个具体的对象,这时我们往往不会实例化该类,这种类就是抽象类。
2. 在Java中,我们通过在类前添加关键字abstract(抽象的)来定义抽象类。如下图所示 :
import Demo09.*;
//abstract抽象类:类 extends:单继承~(接口可以多继承)
public abstract class Application {
//~ 约束~有人帮我们实现~
//abstract: 抽象方法,只有方法名字,没有方法的实现
public abstract void dosomething();
//1.不能去new这个抽象类,只能靠子类去实现它:约束。
//2.抽象类中可以写普通方法。
//3.抽象方法必须在抽象类中。
//抽象的抽象:约束~
}
抽象方法:
我们将“只有方法声明,没有方法体”的一类方法统称为抽象方法,抽象方法用关键字abstract修饰。需要注意的是,如果一个方法已经确定是抽象类,那么它绝不能再有方法体,即不能出现大括号,而是只需要在()后面添加一个分号即可。如果某个类中已经出现了抽象方法,那这个类必须定义成抽象类,否则会报错。
也就是说,拥有抽象方法的类一定是抽象类;但是抽象类不一定有抽象方法。
代码案例:
package Demo09;
public abstract class Worker {
public int age;
private String GH;
private String name;
public int Money;
public Worker(){}
public Worker(int age,int Money,String GH,String name){
this.age=age;
this.GH=GH;
this.name=name;
this.Money=Money;
}
public void show(){
System.out.println("工人"+name+"的工号是:"+GH+"工龄为"+age);
}
public abstract void SetPay();
}
package Demo09;
import demo07.Person;
public class jingLi extends Worker{
private int LV;
public int TrueMoney;
public jingLi(){}
public jingLi(int LV,int TrueMoney, int age, int Money, String GH, String name) {
super(age, Money, GH, name);
this.LV=LV;
this.TrueMoney=TrueMoney;
SetPay();
}
public void SetPay(){
this.TrueMoney=Money+TrueMoney+(500*LV)+age*1000;
}
public void show(){
System.out.println("等级是:"+LV+"\n实际工资是"+TrueMoney);
}
}
package Demo09;
public class xiaoshou extends Worker{
private double XS;
private double TrueMoney;
public xiaoshou(){}
public xiaoshou(double XS,double TrueMoney,int age, int Money, String GH, String name) {
super(age, Money, GH, name);
this.XS=XS;
this.TrueMoney=TrueMoney;
SetPay();
}
public void SetPay(){
if (XS>=10000){
this.TrueMoney=Money+0.09*XS;
}else {
this.TrueMoney=Money+0.08*XS;
}
}
public void show(){
super.show();
System.out.println("销售额是"+XS+"\n实际工资是"+TrueMoney);
}
}
package Demo09;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
System.out.println("基础工资为1000");
Scanner input = new Scanner(System.in);
System.out.println("请输入这个经理的等级:");
int LV= input.nextInt();
System.out.println("请输入这个经理的工龄:");
int age= input.nextInt();
System.out.println("请输入这个经理的10位工号:");
String GH= input.next();
System.out.println("请输入这个经理的名字:");
String name=input.next();
jingLi jl=new jingLi(LV,100,age,0,GH,name);
jl.show();
System.out.println("请输入这个销售的销售额:");
int XS=input.nextInt();
System.out.println("请输入这个经理的工龄:");
int age1= input.nextInt();
System.out.println("请输入这个经理的10位工号:");
String GH1= input.next();
System.out.println("请输入这个经理的名字:");
String name1=input.next();
xiaoshou xs=new xiaoshou(XS,0,age1,1000,GH1,name1);
xs.show();
}
}
输出结果: