Java的Abstraction抽象类/方法-笔记

Java - Abstraction

本文参考这里

  • 抽象类
  • 抽象方法

抽象类(Abstract Class)

包含 abstract方法 的类就是抽象类,此时抽象类必须使用 abstract 修饰,来表示它是抽象类。

抽象类,使用 abstract 修饰。抽象类可以包含自己的变量、抽象方法、具体方法等(也就是说,类是抽象的,但对成员是否抽象则没有要求)。实际上,抽象类是类和接口的混合

抽象类不能创建实例

继承抽象类与继承普通类相同,也使用 extends 关键字。但不同的是,子类必须实现抽象类里的 abstract 方法,若不能实现则子类也须申明成 abstract 类。

语法格式:

/* abstract关键字,申明抽象类 */
public abstract class AbstractClassName {
    // 成员是否抽象,无要求
}

/* 扩展/继承抽象类(Extending Abstract Class) */
public class SubClass extends AbstractClassName {
    // 这里必须要对父类中的抽象方法进行实现。否则,SubClass也须申明成abstract的
}

继承抽象方法的例子:

abstract class MyAbstractClass {
    public abstract void sayhi();
}

/* 第一种:对所继承父类中的抽象方法必须实现,否则编译时报错 */
class MyClass1 extends MyAbstractClass {
    // The type MyClass1 must implement the inherited abstract method MyAbstractClass.sayhi()
    @Override
    public void sayhi() {
        // do something
    }
}

/* 第二种:把子类也申明成抽象的,否则编译时报错 */
abstract class MyClass2 extends MyAbstractClass {
}

抽象方法(Abstract Methods)

当我们在类中想要包含一个特定的方法(method),而又暂时不能进行具体实现(implementation)时(例如类Shape里有计算图形面积的方法,但不同的图形其计算公式也不同,就只能将来在具体的类中才去实现),就可以把这个方法申明为 abstract

抽象方法没有定义,其函数签名后面直接跟分号,而不是花括号(Abstract method would have no definition, and its signature is followed by a semicolon, not curly braces),即没有函数体。

public abstract class Shape
{
    public abstract double computeArea();  // 抽象方法无函数体。该抽象方法,导致所在的类也成为了抽象

    // Remainder of class
}

申明抽象方法有两个结果:
1. 导致所在的类也必须为 abstract:申明一个抽象方法,导致该抽象方法所在的类成为抽象类
2. 在子类中,要么必须重写(override)(或说实现)这些抽象方法,要么子类也为abstract (因为继承得来一个抽象方法,该抽象方法导致所在的类也为抽象,见前面第1条)。最终,在某个子孙类中实现对该抽象方法的重写。否则,类就无法进行实例化,只能为抽象。

public class Triangle extends Shape  // 三角形
{
    double width,height;
    public double computeArea()  // 对抽象方法进行实现
    {
        return width * height / 2.0;
    }

    // Remainder of class
}

public class Rectangle extends Shape  // 矩形
{
    double width,height;
    public double computeArea()  // 对抽象方法进行实现
    {
        return width * height;
    }

    // Remainder of class
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值