抽象:功能具备但不具体
抽象的方法需要用abstract修饰,并用分号结束
有抽象方法的类必须也用abstract修饰,为抽象类
抽象类:在描述事物时,没有足够的信息来具体描述。
抽象特点:
1.抽象方法和抽象类必须被abstract修饰,抽象方法必须在抽象类中
2.抽象类不能够创建实例
3.只有覆盖了抽象类的所有抽象方法,子类才能够被实例化。
细节问题:
1.抽象类一定是父类
2.抽象类有自己的构造方法
只不过无法给自己实例化,但是可以帮助子类进行实例化
例如:
public abstract class A{
private int a;
private int b;
public A(int a,int b){
this.a=a;
this.b=b;
}
}
public class B extends A{
public B(int a,int b){
super(a,b);
}
}
3.抽象类可以不定义抽象方法,仅仅是为了不让实例化
4.abstract关键字不能与一些关键字共存:
【1】final:被final修饰的类不能被继承,但是抽象类一定是父类
【2】static:抽象类不能被实例化是因为方法不具体,狗可以是对象,但是动物这个对象太抽象化了。狗可以是“汪汪”的叫,但是动物我们不知道怎么叫。所以无法实例化抽象类,但是static修饰方法后却可以直接通过类名调用。和对象一样不合适
【3】private:抽象方法被私有化后,那么子类将无法访问重写方法
抽象类与普通类的区别
不同:
1.抽象类不能实例化,普通类可以实例化
2.抽象类描述的事物不具体,普通类描述的具体
3.抽象类可以有抽象函数以分号结尾,普通类没有抽象函数
相同:
1.都是描述事物
2.都可以定义属性和行为
例子:
一个公司有程序员和项目经理
程序员:姓名工号薪水 工作
项目经理:姓名工号薪水奖金 工作
建模
public abstract class Worker {
private String name;
private String id;
private int xMoney;//薪水
public abstract void work();
public Worker(String name,String id,int xMoney) {
// TODO Auto-generated constructor stub
this.name=name;
this.id=id;
this.xMoney=xMoney;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setxMoney(int xMoney) {
this.xMoney = xMoney;
}
public int getxMoney() {
return xMoney;
}
}
//程序员类
public class Programmer extends Worker{
public Programmer(String name, String id, int xMoney) {
super(name, id, xMoney);
// TODO Auto-generated constructor stub
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println("代码");
}
}
//项目经理类
public class Manager extends Worker{
private int jMoney;//奖金
public void setjMoney(int jMoney) {
this.jMoney = jMoney;
}
public int getjMoney() {
return jMoney;
}
public Manager(String name, String id, int xMoney,int jMoney) {
super(name, id, xMoney);
this.jMoney=jMoney;
// TODO Auto-generated constructor stub
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println("管理");
}
}