JAVA中面向对象-抽象类

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_42947972/article/details/102471680

抽象类

抽象:笼统,模糊,看不懂! 不具体.

特点:

   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");
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42947972/article/details/102471680
今日推荐