栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

抽象类的详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

抽象类的详解

一*抽象类:

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();报错,抽象类的不能实例化
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/993546.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号