在 Java 继承 教程里我们明白了继承可以从原有的类中派生出新的类。原有的类称为基类或者父类,派生类称为子类,子类可以拥有父类里面的属性或者方法。
在 Java 语言 里面可以创建一个专门的类来作为父类。这个类就称为抽象类。抽象类里面可以定义具体方法,也可以定义抽象方法,定义类抽象方法,那么子类就必须要实现父类的抽象方法。抽象类不能够被创建对象。
abstract class 类名{
属性;
访问权限 返回类型 方法名 (参数){ //定义一个普通方法
//do something
}
访问权限 abstract 返回值类型 方法名称(参数); //定义一个抽象方法,没有方法体
}
参数 | 描述 |
---|---|
abstract | 抽象类和抽象方法的关键词,加在类前面就是抽象类,加在方法前面就是抽象方法 |
abstract 是抽象类和抽象方法的关键词,abstract 加在类前面表示该类是抽象类,abstract 如果放在方法前面就是抽象方法,抽象方法没有方法体,在参数后面的 ) 就结束了,加了分号。
一个类里面如果有抽象方法,那么这个类就必须是抽象类。如果一个类是抽象类,那么这个里面不一定有抽象方法。
抽象类是不能被实例化的,如果想创建该类的对象,必须是该类的子类。
我们定义一个抽象的父类 AbstractClas.Java
package com.haicoder.net.abs;
public abstract class AbstractClas {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public abstract void getInfo(); //定一个抽象类
}
定义一个子类ChildClass.Java
来继承
package com.haicoder.net.abs;
public class ChildClass extends AbstractClas {
@Override
public void getInfo() {
System.out.println("姓名:" + this.getName() + " 年龄:" + this.getAge());
}
}
定义一个测试类 AbsTest.Java
来测试
package com.haicoder.net.abs;
public class AbsTest {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)\n");
ChildClass childClass = new ChildClass();
childClass.setName("嗨客网");
childClass.setAge(21);
childClass.getInfo();
}
}
运行结果如下:
我们定义了一个子类来继承了抽象的父类,然后父类里面的属性方法就可以被子类来使用了。子类这边 覆盖了父类 里面的 getInfo() 方法。
我们在案例中可以发现,抽象类其实和普通类差不多,其实就是比普通类多了一个 abstract
关键字,抽象类不能够被实例化。抽象类里面的抽象方法是没有方法体的,只是定义了一个方法名和参数还有返回值,抽象类可以作为一个模板。让子类来继承,实现里面的抽象方法。
抽象方法里面的抽象方法需要被子类实现,所以抽象类里面的抽象方法不能够是 private 类型的。