抽象类的学习与总结

简介: 抽象类的学习与总结

1.抽象类

1.1概念

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

举例:

  • 蔬菜
  • 动物
  • 水果
  • 形状

1.2语法

abstract class Shape {
    public abstract void draw();//可以不写方法体,也可以写
    /*public void draw() {
        System.out.println("画图形");
    }*/
}
public class Test4 {
    public static void main(String[] args) {
        //Shape shape = new Shape();//抽象类 ,抽象类不能被实例化
    }
}

抽象类也属于类,内部可以包含普通方法和属性

既然抽象类不能被实例化,那么抽象类被用来做什么呢?

答:继承


1.3特性

1.3.1抽象方法不能被private,final,static修饰

因为抽象是指事物的共性被抽离出来,是一个概念而非具体的实现

具体的实现是由继承它的子类去完成的

当用private,final,static修饰抽象方法,子类就不能够重写draw方法了


1.3.2抽象类必须被继承,并且继承后子类要重写父类中的抽象方法

abstract class Shape {
    public  abstract void draw();
    /*public void draw() {
        System.out.println("画图形");
    }*/
}
class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("画矩形");
    }
}
class Circle extends Shape {
    @Override
    public void draw() {
        System.out.println("画圆形");
    }
}
class Flower extends Shape {
    @Override
    public void draw() {
        System.out.println("❀");
    }
}

1.3.3抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类

此时的Cat类是一个普通类,不能包含抽象方法


1.3.4抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量

abstract class Shape {
    public Shape() {
    }
    public  abstract void draw();
    /*public void draw() {
        System.out.println("画图形");
    }*/
}
class Rect extends Shape {
    public Rect() {
        super();//抽象类的构造方法
    }
    @Override
    public void draw() {
        System.out.println("画矩形");
    }
}

1.4抽象类的作用

抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类.。然后让子类重写抽象类中的抽象方法。

那普通的类也可以被继承,普通的方法也可以被重写,为什么一定要用抽象类和抽象方法呢?

答:用抽象类相当于多了编译器检验

如图:

当子类没有重写draw方法时,编译器会报错

当类为普通类时就不会报错

这是因为抽象类的主要作用是被继承

相关文章
|
9月前
|
编译器 C++
|
9月前
|
编译器 C++
【C++】类和对象(下)(三)
【C++】类和对象(下)(三)
|
2月前
|
Java 编译器 C语言
理解类和对象
理解类和对象
19 1
|
2月前
|
存储 编译器 C语言
类和对象(1)
类和对象(1)
16 1
|
2月前
|
存储 编译器 C语言
【c++】类和对象(一)
朋友们,大家好,本篇内容我们来对类和对象进行初步的认识
|
2月前
|
编译器 C++
【c++】类和对象3
【c++】类和对象3
22 1
|
2月前
|
存储 编译器 C++
C++类与对象【继承】
C++类与对象【继承】
|
12月前
|
C++
C++学习笔记_03类的继承 2021-04-15
C++学习笔记_03类的继承 2021-04-15
|
7月前
|
编译器 C++
类和对象(下)
类和对象(下)
31 0
|
9月前
|
安全 程序员 C++
C++ 类和对象(二)
C++ 类和对象(二)
29 0