想象一下,有一个父类Animal,子类有Dog,Tiger,Cat等等。我们实例化一个Dog类型orTiger类型的变量(即new Dog())看起来是很合理的事。但是!如果我们实例化一个Animal类型的变量,即new Animal(),是不是看起来有一点奇怪?Animal的实例化对象是什么?Dog是一条狗,Cat是一只猫,Animal是什么???
“专业、务实、高效、创新、把客户的事当成自己的事”是我们每一个人一直以来坚持追求的企业文化。 成都创新互联是您可以信赖的网站建设服务商、专业的互联网服务提供商! 专注于网站设计制作、成都做网站、软件开发、设计服务业务。我们始终坚持以客户需求为导向,结合用户体验与视觉传达,提供有针对性的项目解决方案,提供专业性的建议,创新互联建站将不断地超越自我,追逐市场,引领市场!因此,我们发现有些类是不应该被初始化的。(即不应该存在被实例化的对象)
在本例子中,Animal就是抽象类,而Dog、Tiger和Cat这些都是具体类。
Fig.1 抽象类和具体类
二、设计抽象类而在java中,要想让一个类不被初始化,只需要在类的声明前面加上关键字abstract即可。
abstract class Animal{
public void roam();
}
抽象类代表没有人能够创建出该类的实例化对象,编译器不会通过。
三、抽象类声明引用变量虽然抽象类无法实例化对象,但是抽象类仍然可以声明引用变量,抽象类只是无法实例化对象。
abstract class Animal{
public void roam();
}
public class MakeAnimal{
public void go(){
Animal a; //抽象类可以声明引用变量
a = new Dog();
a = new Cat(); //该部分涉及多态的内容
a.roam();
}
}
四、Tips抽象方法和抽象类一样,都是用abstract关键字修饰。它的特点在于抽象方法没有方法体:
public abstract void eat(); //没有方法体,直接结束
二、为什么要有抽象方法?因为有时没有办法给任何子类都抽象出都有意义的共同程序代码。而抽象方法可以实现即使无法实现出方法的内容,但是仍然可以定义出一组子类共同遵守的协议。(即都要实现的方法,即使父类中没有方法体)
三、Tips你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧