java抽象类

抽象类

1.什么是抽象类?

类和类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类。

类本身是不存在的,所以抽象类无法创建对象《无法实例化》。

 

2.抽象类属于什么类型?

抽象类也属于 引用数据 类型。

 

3.抽象类怎么定义?

语法:

[修饰符列表] abstract class 类名{

类体;

}

 

4.什么是抽象方法?

抽象类关联到一个概念:抽象方法

抽象方法表示没有实现的方法没有方法体的方法

 

抽象方法怎么定义?

例如:

 public abstract void doSome();

 

抽象方法的特点

特点1:没有方法体,以分号结尾

特点2:前面修饰符列表中有 abstract 关键字。

 

5.结论:

第一:抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的。

第二:final和abstract不能联合使用,这两个关键字是对立的。

第三:抽象类的子类可以是抽象类。也可以是非抽象类。

第四:抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。

第五:抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中。

第六(*五颗星):一个非抽象的类,继承抽象类,必须将抽象类中的抽象方法进行覆盖/重写/实现。

 public class AbstractTest02{
  public static void main(String[] args){
        // 能不能使用多态?
        // 父类型引用指向子类型对象。
        Animal a = new Bird(); // 向上转型。(自动类型转换)
         
        // 这就是面向抽象编程。
        // 以后你都是调用的a.XXXX
        // a的类型是Animal,Animal是抽象的
        // 面向抽象编程,不要面向具体编程,降低程序的耦合度,提高程序的扩展力。
        // 这种编程思想符合OCP原则。
         
        /*
        分析以下:
        编译的时候这个move()方法是谁的?
        运行的时候这个move()方法又是谁的?
        */
        a.move();
         
        // 多态
        Animal x = new Cat();
        x.move();
    }
 }
 // 动物类(抽象类)
 abstract class Animal{
 // 抽象方法
 public abstract void move();
 }
 
 // 子类(非抽象的)
 // 错误: Bird不是抽象的, 并且未覆盖Animal中的抽象方法move()
 /*
 class Bird extends Animal{
 }
 */
 
 class Bird extends Animal{
    // 需要将从父类中继承过来的抽象方法进行覆盖/重写,或者也可以叫做“实现”。
    // 把抽象的方法实现了。
    public void move(){
    System.out.println("鸟儿在飞翔!");
    }
 }

到目前为止,只是学习了抽象类的基础语法,一个类到底声明为抽象还是非抽象,这个以后慢慢来吧。写代码多的时候,自然就理解了。

 

6.面试题(判断题):java语言中凡是没有方法体的方法都是抽象方法。

不对,错误的。

Object类中就有很多方法都没有方法体,都是以“;”结尾的,但他们都不是抽象方法,

例如:

  public native int hashCode();

这个方法底层调用了C++写的动态链接库程序。

前面修饰符列表中没有:abstract。有一个native。表示调用JVM本地程序。

posted @ 2021-11-30 14:01  小羊是頭豬  阅读(50)  评论(0)    收藏  举报