抱歉,你查看的文章不存在

唠唠SE的面向对象-08——抽象类 原

8. abstract抽象类

动物到底是什么样的?根本没法实例化出来!所以要使用抽象类。

当描述一个类的时候,如果不能确定功能函数如何定义,那么该类就可以定义为抽象类,功能函数应该描述为抽象函数。

一开始,我们先把上一节的Animal类给变成抽象的:

abstract class Animal {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public abstract void eat();
    public abstract void sleep();
    public abstract void say();
}

抽象类的特点

1:有抽象方法的类,该类一定是抽象类

2:抽象类中不一定要有抽象方法。

        这段代码就不报错。。。

abstract class Animal {
    public void eat() {
        System.out.println("米西米西,花布拉吉。。。");
    }
}

3:抽象类不能使用new创建对象(先这样理解,但实际不是这样)

        创建对象,使用对象的功能,抽象类的方法,没有方法体。

4:抽象类主要为了提高代码的复用性,让子类继承来使用。

5:编译器强制子类实现抽象类父类的未实现的方法

当然也可以不实现,前提是子类的也要声明为抽象的。

抽象的优点

1:提高代码复用性

2:强制子类实现父类中没有实现的功能

3:提高代码的扩展性,便于后期的代码维护

  • 抽象类不能创建对象,那么抽象类中是否有构造函数?
    • 抽象类中一定有构造函数。主要为了初始化抽象类中的属性。通常由子类实现或重写。
  • 抽象类可以没有抽象方法(java.awt.*的类就是这样子操作的)。
  • 抽象类可以继承普通类与抽象类。
  • 抽象类不能直接使用类名创建实例,但是有构造方法,构造方法是让子类进行初始化。

注意一点:final和abstract一定不能同时修饰同一个类。

最后,我们把上一节的图形类也抽象出来吧!

abstract class Graph {
    public abstract double getPerimeter();
    public abstract double getArea();
}

class Circle extends Graph {
    private double r;

    public double getPerimeter() {
        return Math.PI * 2 * r;
    }

    public double getArea() {
        return Math.PI * r * r;
    }
}

class Rectangle extends Graph {
    private double width, height;

    public double getPerimeter() {
        return 2 * (width + height);
    }

    public double getArea() {
        return width * height;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

LinkedBear的个人空间

0 篇文章14 人订阅

相关文章

来自专栏吾爱乐享

java学习-string类的常用功能

13770
来自专栏鸿的学习笔记

python的对象引用

Every object has an identity, a type and a value. An object’s identity never cha...

12830
来自专栏小古哥的博客园

教程笔记《JavaScript深入浅出》

一、数据类型 javascript是弱数据类型语言,不需要显式的定义类型,一共有如下六种数据类型 五种基本类型:number,string,boolean,nu...

29360
来自专栏LanceToBigData

JavaSE(四)之接口、访问控制

上面我们学习了几个修饰符,在开发中经常会用的到,所以必须熟练的掌握。接下来我学习一下接口和访问控制。 一、接口 一系列方法的声明,是一些方法特征的集合,一个接口...

24670
来自专栏Jed的技术阶梯

详解 Java 对象与内存控制(上)

不管是类变量还是实例变量,你都不能引用一个还没有定义的变量,或者在引用之前没有定义的变量,如下图所示:

12230
来自专栏Echo is learning

python/pandas 正则表达式 re模块

2.4K60
来自专栏工科狗和生物喵

【计算机本科补全计划】Java学习笔记(三) 数据类型

正文之前 Java的面向对象特性太明显了。先开篇告诉你我们的对象是啥意思,然后直截了当的告诉你,每个文件都是一个类。也就是说每个文件都可以给你传出来一种对象,然...

35840
来自专栏老九学堂

想要Java高薪,必须掌握这些基础知识点!(一)

相信很多小伙伴已经听完了徐老师的Java课程,那么Java基础的知识点你真的掌握了吗?今天就跟随老九的步伐一起来复习复习Java基础的知识点吧! ? 1、在Ja...

35360
来自专栏尾尾部落

[剑指offer] 数组中的逆序对

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的...

36820
来自专栏java思维导图

【一分钟知识】多态、抽象类与接口

1、构造器(constructor)是否可被重写(override) 构造器不能被继承,因此不能被重写, 可以被重载 2、eqauls方法和hashCode方法...

32040

扫码关注云+社区

领取腾讯云代金券