抽象类的学习与总结

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

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方法时,编译器会报错

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

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

相关文章
|
7月前
|
安全 Java 程序员
面向对象——多态,抽象类,接口(二)-1
面向对象——多态,抽象类,接口(二)
45 1
|
7月前
|
Java
面向对象——多态,抽象类,接口(二)-2
面向对象——多态,抽象类,接口(二)
32 1
|
设计模式 自然语言处理 C#
C#OOP之八 继承 接口和抽象类
C#OOP之八 继承 接口和抽象类
57 0
C++学习笔记_04抽象类、多态 2021-04-15
C++学习笔记_04抽象类、多态 2021-04-15
【面向对象】抽象类和接口
【面向对象】抽象类和接口
|
C++
C++多态纯虚函数和抽象类与多态案例(二)
纯虚函数和抽象类 在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容 因此可以将虚函数改为纯虚函数 纯虚函数语法:virtual 返回值类型 函数名 (参数列表)= 0 ; 当类中有了纯虚函数,这个类也称为==抽象类== 抽象类特点: • 无法实例化对象 • 子类必须重写抽象类中的纯虚函数,否则也属于抽象类
147 0
C++多态纯虚函数和抽象类与多态案例(二)
笔记12-多态&抽象类&接口
笔记12-多态&抽象类&接口
|
Java 开发者
抽象类 | 学习笔记
快速学习抽象类。
174 0
抽象类 | 学习笔记
|
Java
抽象类必须要有抽象方法吗?面试篇(第十一天)
抽象类就相当于半成品的食物,经过简单的加工就成为一份可以食用的食物,而每个普通类就是可以食用的食物,所以抽象类不能实例化,因为实例化就相当于实例化出来的东西就是可以直接用的,而半成品不可以用,所以抽象类不可以实例化。
152 0