抽象(abstract):
抽象类:使用abstract修饰的类。
抽象类的特点:
1.抽象类中可以包含抽象方法,因为抽象方法只有方法的声明,没有方法的实现,所以抽象类不能被实例化!
2.抽象类一定是一个父类,那么需要子类来“实现”抽象类中的抽象方法。
3.a)如果子类实现了父类中所有的抽象方法,那么该子类就能被实例化!.b)如果子类实现了父类中的部分抽象方法,那么该子类就不能被实例化,因为该子类依旧就是一个抽象类!c)抽象类和子类的关系是extends关系,从本质上来讲,抽象类就是一个特殊的普通类(包含了抽象方法)!d)关于“重写”和“实现”的理解
重写:指的就是子类重写普通父类中的方法,那么我们就称之为重写!
实现:指的就是子类重写抽象类中的方法,那么我们就称之为实现!
4.抽象类的组成:a)抽象类中,可以包含抽象方法,意味着可以有抽象方法,也可以没有抽象方法。b)抽象类中,可以包含属性(成员变量和静态变量)和方法(成员方法和静态方法)。c)抽象类中,可以包含静态代码块和构造代码块。d)抽象类中,可以包含构造方法,在子类的构造方法中去调用抽象类的构造方法, 从而实现给抽象类中的成员变量做初始化!
总结:抽象类就是一个特殊的类。相比较于普通类,抽象类可以包含抽象方法。
抽象方法:
声明是抽象方法:使用abstarct修饰的方法。
a)抽象方法只有方法的声明,没有方法的实现!
b)子类只有把抽象类中的抽象方法全部实现,那么该子类才能被实例化!
如果子类没有全部实现抽象类中的方法,那么该子类就不能被实例化,该子类依旧是一个抽象类!
抽象方法的使用场合:1)父类不能被实例化。 2)要求子类必须全部实现抽象类(父类)中的方法。3)一个类中,包含了抽象方法,也包含了普通类中的内容(属性、方法、构造方法、代码块),那么这个类必须使用abstarct修饰。
注意:
1)abstarct和 final是反义词!
2)abstarct不能和 final、private和static一起共存!
3)抽象类也可以实现多态! 例如: Employee employee = new Teacher();
public abstract class Animal {
/**
* 动物吃方法
*/
public abstract void eat();
/**
* 动物睡方法
*/
public abstract void sleep();
}
public class Cat extends Animal {
public void eat(){
System.out.println("猫在吃鱼。。。");
}
public void sleep() {
System.out.println("猫在睡觉。。。");
}
}
public abstract class Dog extends Animal {//这里Dog对象被abstract修饰,所以对象不能被实例化,如需实例化,去掉abstruct即可。
public void eat(){
System.out.println("狗狗在吃狗粮。。。");
}
public void sleep() {
System.out.println("狗狗在睡觉觉。。。");
}
}
public class Test {
public static void main(String[] args) {
//如果也想在
Cat cat = new Cat();
cat.eat();
cat.sleep();
//Dog dog = new Dog();这里会报错,因为抽象类不能被实例化。
}
}
运行结果:
猫在吃鱼。。。
猫在睡觉。。。