包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。
总结:
1.抽象类不可以被实例化 (实例化:用类创建对象的过程。)
2.抽象类可以有构造器(构造方法)
3.抽象类里面可以有普通方法
4.抽象类可以全部都是普通方法
5.抽象类不可以被private修饰. 因为抽象类就是为了被继承的子类实现的,private后就没有意义了
抽象类可以用 public, protected, default修饰
6.抽象方法不可以被static关键字修饰, 因为静态方法无法被重写
7.抽象方法不能被final关键字修饰,因为final修饰过的类不能被重写
8.抽象类不可以被synchronized修饰,和线程无关,因为抽象方法不涉及实现细节
9.一个子类只能继承一个抽象类,因为java是单继承, 抽象类也是类, 抽象类没有方法体,.
10.抽象类没有方法体: 它的子类必须实现这些方法
例如:如果一个抽象的动物类,规定了吃喝这两个方法,那么子类人就必须去实现
11.抽象方法不能同时是本地方法
一个抽象类的例子:
写一个动物的抽象类,有吃和喝两种抽象方法,再写三个类继承动物类
分别是人类,狗类,猫类,
人增加一个哭的方法,
狗增加一个看门的方法,
猫增加一个捋毛的方法
import java.util.*;
abstract class Animal{
abstract void eat();
abstract void drink();
}
class Person extends Animal{
public void eat(){
System.out.println("Person eat...");
}
public void drink(){
System.out.println("Person drink...");
}
public void cry(){
System.out.println("Person cry");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("Dog eat...");
}
public void drink(){
System.out.println("Dog drink...");
}
public void guardTheHouse(){
System.out.println("Dog guardTheHouse");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("Cat eat...");
}
public void drink(){
System.out.println("Cat drink...");
}
public void cleanUpFur(){
System.out.println("Cat cleanUpFur");
}
}
public class Main11 {
public static void main(String[] args) {
Person p = new Person();
Dog d = new Dog();
Cat c = new Cat();
p.eat();
p.drink();
p.cry();
c.eat();
c.drink();
c.cleanUpFur();
d.eat();
d.drink();
d.guardTheHouse();
}
}
运行结果: