抽象类:包含了抽象方法的类。抽象方法就是只有方法的声明,没有方法体。
为什么需要抽象类?如何定义抽象类?
是一种模板模式。抽象类为所有子类提供了一个通用模板,子类可以在这个模板基础上进行扩展。
通过抽象类,可以避免子类设计的随意性。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。
要点:
1.有抽象方法的类只能定义为抽象类
2.抽象类不能实例化,既不能用new来实例化抽象类
3.抽象类可以包含属性,方法,构造方法。但是构造方法不能用来new实例,只能用来被子类调用。
4.抽象类只能用来继承
5.抽象方法必须被子类实现
Tset类:
为什么需要抽象类?如何定义抽象类?
是一种模板模式。抽象类为所有子类提供了一个通用模板,子类可以在这个模板基础上进行扩展。
通过抽象类,可以避免子类设计的随意性。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。
要点:
1.有抽象方法的类只能定义为抽象类
2.抽象类不能实例化,既不能用new来实例化抽象类
3.抽象类可以包含属性,方法,构造方法。但是构造方法不能用来new实例,只能用来被子类调用。
4.抽象类只能用来继承
5.抽象方法必须被子类实现
抽象类中的方法被子类继承时必须要重写该方法或者让子类也变成抽象类。
Animal类:
package cn.hxk.oop.abstactClass;
public abstract class Animal {
String str;
public abstract void run(); //抽象方法的意义在于:将方法的设计与方法的实现分离了!
public void breath(){
System.out.println("呼吸");
run();
}
//该构造器不能被Animal调用
public Animal(){
System.out.println("创建一个动物");
}
}
class Cat extends Animal{
@Override
public void run() {
System.out.println("猫跑");
}
}
class Dog extends Animal{
@Override
public void run() {
System.out.println("狗跑");
}
}
Tset类:
package cn.hxk.oop.abstactClass;
public class Test {
//Animal animal = new Animal()抽象类不能被实例化 不能调用new来构造对象
public static void main(String[] args){
Animal s = new Cat();
s.run();
}
}