版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
抽象类
抽象:笼统,模糊,看不懂! 不具体.
特点:
1.方法只有声明没有实现时,该方法就是抽象法,需要被abstract修饰
抽象方法必须定义在抽象类中,该类也被abstract修饰
2.抽象类不可以被实例化.
为什么?
因为调用抽象方法没有意义.
3.抽象类必须有其子类覆盖所有抽象方法后,该子类才可以实例化.
否则,这个子类还是抽象类.
问题:
1.抽象类中有构造函数吗?
有,用于给子类对象进行初始化.
2.抽象类可以不定义抽象方法吗?
可以有.但是少见,目的就是不让该类创建对象,AWT的适配器对象就是这种
通常这个类的方法有方法体,但是却没有内容
例如:
abstract class Demo //abstract关键字
{
void show1()
{}
void show2()
{}
}
3.抽象关键字不可以和那些关键字共存?
private 不行 因为抽象需要被覆盖, 子类方法覆盖父类方法时,如果私有,子类就找不到了.
static 不行 因为静态不需要对象,类名可以直接调用该方法,但是该方法没有方法体,调用来干嘛...
final 不行 final在修饰类时,是不能被继承的, 而abstract修饰是可以被继承的
4.抽象类和一般类的异同点
相同点:
抽象类和一般类都是用来描述事物的,都是内部定了成员
不同点:
1.一般类有足够的信息描述事物
抽象类描述事物的信息有可能不足.
2.一般类不可以定义抽象方法,只能定义非抽象方法
抽象类可以定义抽象方法,同时也可以定义非抽象
3.一般类可以被实例化
抽象类不可以被实例化
5.抽象类一定是父类吗?
是的,因为需要子类覆盖其方法后才可以对子类实例化.
抽象类的提取例子:
abstract /*抽象*/ class Demo0{ //叫做抽象类
abstract/*抽象*/ void show(); //叫做抽象方法
}
class DemoA extends Demo0{
//和DemoB的功能一样,但是内容不一样,这样也可以把它们提取出来
void show()
{
System.out.println("aaaa");
}
}
class DemoB extends Demo0{
void show()
{
System.out.println("bbbb");
}
}