抽象类(Abstract Class)
抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法
我们这样定义抽象类:
Employee.java
public abstract class Employee {
private String name;
private String address;
private int number;
public Employee(String name, String address, int number) {
System.out.println("构造一个雇员");
this.name = name;
this.address = address;
this.number = number;
}
public void oneAddress() {
System.out.println("名字为:" + this.name + ",地址为:" + this.address);
}
public void testMethod() {
System.out.println("这是抽象类中的一个测试方法");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}
上述抽象类中构造一个Employee对象,给出了一个someOne()方法,剩下的都是get和set方法,与普通类构造没太大区别。由于抽象类不能被不能直接实例化,所以我们通过构造其子类来操作,下面是其子类代码:
InheritanceEmployee.java
public class InheritanceEmployee extends Employee{
public InheritanceEmployee(String name, String address, int number) {
super(name, address, number);
}
public void oneAddress(){
System.out.println("你的名字是:" + getName());
System.out.println("你的地址是:" + getAddress());
System.out.println("你的数字是:" + getNumber());
}
}
调用方法:
AbstractTest.java
<