抽象类的详解

本文介绍了抽象类的概念,指出抽象类是用来描述对象但不包含完整信息的类,其主要特征是包含抽象方法。在Java中,使用`abstract`关键字定义抽象类和抽象方法,抽象方法没有具体实现。抽象类不能直接实例化,必须由子类继承并实现其抽象方法。文章通过示例展示了如何定义抽象类和抽象方法,并强调了抽象类在多态和类型安全方面的角色。
摘要由CSDN通过智能技术生成

一*抽象类:

1.1抽象类概念:

在面向对象的概念中,所有对象都是通过类来描述的,但是反过来,并不是多又累都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘具体的对象,这样的类就是抽象类。

总的来说:父类中的方法没有具体的实现,需要子类对父类的方法进行重写去实现具体的功能或者行为。像这种没有实际工作的方法,我们可以把它设计为一个抽象方法,而包含了抽象方法的类我们称为抽象类

1.2抽象类语法:

在java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法。而抽象方法不用给出具体的实现体。即没有{...}代码块。

例1:定义抽象类和抽象方法:

public abstract class Shape{//定义一个Shape抽象类

    public String name;//成员变量
    public abstract void draw();//抽象方法

    private abstract void method();//报错

    void calArea(){//普通方法
        System.out.println("计算面积!");
    }

    public Shape(){//无参构造方法
        System.out.println("Shape构造方法!");
    }

    public Shape(String name) {//有参构造方法
        this.name = name;
    }
}

注意:抽象类也是类,内部可以包含普通方法和属性,甚至构造方法。

1.3抽象类特性:

1.抽象类不能直接实例化对象。

2.抽象方法不能是private的,且如果没加访问限定符时,默认时public的。

3.抽象方法不能被final和static修饰,因为抽象方法要被子类重写。

4.抽象类必要要被子类继承,且子类必须要重写父类的抽象方法,除非子类也是抽象类,可以不用重写,但出来混迟早要还的,如果下一个类继续继承这个抽象类,就要把所有的抽象方法都要重写。

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

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

7.抽象类的作用相当于多了一重编译器的校检。

例2:抽象方法和抽象类的定义和访问

abstract class Shape{
    public String name;
    public abstract void draw();
   // public static abstract void methodA();报错,static不能修饰抽象方法
   //public abstract final void methodA();报错,final不能修饰抽象方法
    void calArea(){
        System.out.println("calArea普通方法!");
    }

    public Shape(){
        System.out.println("Shape无参构造方法!");
    }

    public Shape(String name) {
        this.name = name;
        System.out.println("Shape有参构造方法!");
    }
}
class Flower extends Shape{
    @Override
    public void draw() {
        System.out.println("❀");
    }
}
class Triangle extends Shape{
    @Override
    public void draw() {
        System.out.println("△");
    }
}
class Circular extends Shape{
    @Override
    public void draw() {
        System.out.println("○");
    }
}

public class Test1 {
    public static void draw(Shape shape){
      shape.draw();
    }
    public static void main(String[] args) {
        
        Shape shape=new Circular();
        shape.draw();
        Shape shape1=new Flower();
        shape1.draw();
        Shape shape2=new Triangle() ;
        shape2.draw();
       // Shape shape4=new Shape();报错,抽象类的不能实例化
    }
}

  • 11
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值