抽象类
——当描述事物时,没有足够的信息对该事物进行描述,那么该描述对应的类就是一个抽象类。
abstract class Demo//抽象类
{
abstract /*抽象*/void show();
…
}
抽象类的特点:
(1)没有方法体的方法是抽象方法,一定定义在抽象类中。
(2)抽象类和抽象方法必须用abstract关键字所修饰。
(3)抽象类不可以被实例化。为什么?因为调用抽象方法没有意义。
(4)抽象类必须由其子类覆盖掉所有的抽象方法后,其子类才可以进行实例化。 否则,该子类还是一个抽象类。
注意:
(1)抽象类一定是一个父类。
(2)抽象类有构造方法,是给子类对象提供初始化动作的。
(3)抽象类中可以不定义抽象方法。
(4) 抽象关键字不能和final、private、static关键字共存。
(4) 抽象关键字不能和final、private、static关键字共存。
一般类和抽象类的区别
(1)相同之处:一般类和抽象类都用于描述事物。里面都可以定义属性和行为,以及构造函数。
(2)不同之处:一般类中不可以定义抽象函数,抽象类可以。一般类可以被实例化,抽象类不行。
一般类可以被继承,也可以不被继承,抽象类一定要被继承,需要其子类覆盖所有的抽象方法子类才可以被实例化。
例子:
//抽象类
package com.dragon.src;
abstract class Employee {
private String name;
private String id;
private double pay;
//getter & setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public double getPay() {
return pay;
}
public void setPay(double pay) {
this.pay = pay;
}
//构造函数
public Employee() {
}
public Employee(String name, String id, double pay) {
super();
this.name = name;
this.id = id;
this.pay = pay;
}
//工作
abstract void work();
}
//经理
package com.dragon.src;
public class Manager extends Employee {
public Manager() {
super();
}
public Manager(String name, String id, double pay) {
super(name, id, pay);
}
@Override
void work() {
System.out.println("Manage");
}
}
//程序员
package com.dragon.src;
public class Programmer extends Employee {
public Programmer() {
super();
}
public Programmer(String name, String id, double pay) {
super(name, id, pay);
}
@Override
void work() {
System.out.println("Coding");
}
}
//主函数
package com.dragon.src;
public class AbstDemo {
/**
* 主函数部分
* @param args
*/
public static void main(String[] args) {
Manager manager = new Manager("DRAGON", "3", 10000);
manager.work();
Programmer programmer = new Programmer("xiaoming", "343", 5000);
programmer.work();
}
}