前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【测开技能】Java系列(二十 八)抽象类

【测开技能】Java系列(二十 八)抽象类

作者头像
雷子
发布2022-09-29 20:24:53
1980
发布2022-09-29 20:24:53
举报

前一篇:

【测开技能】Java系列(二十 七)多态

这一篇,我们开始去分享抽象类


由于多态的存在,每个子类都可以覆写父类的方法。

代码语言:javascript
复制
class yuebing extends Food{
    @Override
    public  double getTax(){
        return  super.getTax();
    }
}

class Mantou extends Food{
        @Override
        public    double getTax(){
            return  income*0.8;
        }
    }

class Food {

    protected double income=100;
    public double getTax() {
        return income * 0.1;
    }

}

Food类派生的Mantou和yuebing都可以覆写getTax()方法。

如果父类FoodgetTax()方法没有实际意义,能否去掉方法的执行语句?

答案是不行,会导致编译错误,因为定义方法的时候,必须实现方法的语句。

能不能去掉父类的getTax()方法?

答案还是不行,因为去掉父类的getTax()方法,就失去了多态的特性。

如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法,目的是让子类去覆写它,那么,可以把父类的方法声明为抽象方法:

代码语言:javascript
复制
  abstract class Food {
        public abstract void  getTax() ;
    }

二者都必须是抽象的才可以。即 类抽象,下面一个只定义抽象类的方法。

定义的抽象类,是不能直接去实例化的

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        Food food=new Food() ;
    }
}

    
    abstract class Food {
        public abstract void  getTax() ;
    }

运行报错如下

那么这样的类,能做什么呢?只能被继承。那么如何继承呢?

代码语言:javascript
复制
class  Manto extends Food{
    @Override
    public void getTax() {
        
    }
}

abstract class Food {
    public abstract void  getTax() ;
}

很简单,但是继承后必须实现getTax方法。

定义了抽象类,抽象类方法,在继承的时候,必须重写抽象类的抽象方法。

如果抽象类有非抽象的方法,继承的时候,不用复写的

代码语言:javascript
复制
class  Manto extends Food{
    @Override
    public void getTax() {

    }
}

abstract class Food {
    public abstract void  getTax() ;
    public  void  say(){
        System.out.println("sss");
    }
}

面向抽象编程

当我们定义了抽象类Food,以及具体的Manto子类的时候,我们可以通过抽象类Food类型去引用具体的子类的实例.

这种引用抽象类的好处在于,我们对其进行方法调用,并不关心Food类型变量的具体子类型.

尽量引用高层类型,避免引用实际子类型的方式,称之为面向抽象编程。

面向抽象编程的本质就是:

上层代码只定义规范(例如:abstract class Food);

不需要子类就可以实现业务逻辑(正常编译);

具体的业务逻辑由不同的子类实现,调用者并不关心。

到这里抽象类就分享完毕。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 面向抽象编程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档