美文网首页
抽象类与抽象方法

抽象类与抽象方法

作者: 许宏川 | 来源:发表于2015-07-25 18:45 被阅读114次

编程的时候会有这样的需求,你定义一个类,你知道必须有哪些方法但是你又不知道这些方法具体怎么实现。例如每个App都有安装、卸载和运行这些方法,但是具体App怎么安装、卸载和运行并不清楚。于是你希望父类App规定子类们必须有这些方法,但是父类本身不写具体实现,让子类们去写具体实现。

语法##

可以把类和方法定义为抽象的,语法是在类名或方法名前加abstract关键字。

概念##

  • 抽象类只能被继承不能被实例化。
  • 抽象方法没有方法体,且子类必须重写。

好处##

  • 父类更抽象通用性更好,不能实例化但是可以用于声明,利用了多态的特性。
  • 因为抽象方法必须重写可以避免遗漏的错误

注意##

  • 因为抽象方法必须被子类重写,而构造方法不能被继承(只能在子类通过super关键字调用)。所以构造方法不能用abstract修饰。
  • 因为final类不能被继承,所以不能final和abstract不能同时修饰一个类
  • 因为final方法不能被重写,所以final和abstract不能同时修饰一个方法
  • 如果子类要重写父类的抽象方法,那么子类必须能访问抽象方法,所以private和abstract不能同时修饰一个方法。
  • 因为抽象方法是没有方法体的,而static修饰的方法可以不用实例化直接用类名调用。而调用一个没有方法体的方法没有意义,所以static和abstract不能同时修饰一个方法。

示例代码
抽象一个App父类,包含安装、卸载和运行。因为不知道具体实现,所以定义为抽象方法的。

public abstract class App {

    protected String name; // 应用名称

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    //安装
    public abstract void install();

    //卸载
    public abstract void remove();

    //运行
    public abstract void run();
}

下面的Chrome类和WeiShi360类对App的继承与重写。

public class Chrome extends App {

    public Chrome() {
        this.name = "Chrome";
    }

    //安装
    public void install() {
        System.out.println("安装" + this.name);
    }

    //卸载
    public void remove() {
        System.out.println("卸载" + this.name);
    }

    //运行
    public void run() {
        System.out.println(this.name + "运行中。。。");
    }

}
public class WeiShi360 extends App {

    public WeiShi360() {
        this.name = "360安全卫士";
    }

    //安装
    public void install() {
        System.out.println("安装" + this.name);
        System.out.println("捆绑安装360全家桶");
        System.out.println("设置开机启动项");
    }

    //卸载
    public void remove() {
        System.out.println("警告:卸载后电脑会变得很不安全,是否要卸载?");
        System.out.println("询问:真的要卸载吗?");
        System.out.println("询问:你确定要卸载吗?");
        System.out.println("询问:你忍心卸载吗?");
        System.out.println("卸载" + this.name);
    }

    //运行
    public void run() {
        System.out.println(this.name + "运行中。。。");
        System.out.println("弹广告。。。");
        System.out.println("提示:一键清理垃圾,清理后电脑运行速度显著提升哦");
        System.out.println("提示:有软件可以更新");
        System.out.println("提示:提示建议卸载XX软件");
        System.out.println("偷偷黑一下竞争对手的软件进程");
        System.out.println("偷偷收集点用户数据");
    }

}

测试代码

    App app1 = new Chrome();
    App app2 = new WeiShi360();
    
    app1.install();
    app1.remove();
    app1.run();
    
    System.out.println("********************");
    
    app2.install();
    app2.remove();
    app2.run();

运行结果:
<pre>
安装Chrome
卸载Chrome
Chrome运行中。。。


安装360安全卫士
捆绑安装360全家桶
设置开机启动项
警告:卸载后电脑会变得很不安全,是否要卸载?
询问:真的要卸载吗?
询问:你确定要卸载吗?
询问:你忍心卸载吗?
卸载360安全卫士
360安全卫士运行中。。。
弹广告。。。
提示:一键清理垃圾,清理后电脑运行速度显著提升哦
提示:有软件可以更新
提示:提示建议卸载XX软件
偷偷黑一下竞争对手的软件进程
偷偷收集点用户数据
</pre>

本文代码下载:百度网盘

相关文章

  • 抽象类、接口、内部类总结

    抽象方法与抽象类 抽象方法与抽象类必须使用abstract修饰,有抽象方法的类只能被定义为抽象类,抽象类里可以没有...

  • 抽象、接口

    1.抽象类与抽象方法2.接口 1.抽象类与抽象方法 1.1 抽象方法使用abstract修饰的方法,没有方法体,只...

  • 基础知识一

    一、抽象类与接口 抽象类 特点: 1.抽象类中可以构造方法 2.抽象类中可以存在普通属性,方法,静态属性和方法。 ...

  • 抽象类和接口

    抽象类和接口 抽象类与抽象方法 抽象类可以看做一种特殊的类,抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽...

  • 抽象与接口

    抽象类 抽象类和抽象方法必须用abstract修饰 抽象类不能被实例化 抽象类有默认构造方法 有抽象方法毕为抽象类...

  • Jade day04抽象类、接口、多态

    抽象类 抽象方法: 没有方法体的方法(只有方法的声明) 抽象类:包含抽象方法的类就是抽象类定义抽象类 举例 实现类...

  • JAVA 核心笔记 || [9.1] 抽象类与接口的区别

    抽象类与接口的区别 接口只能有抽象方法, 抽象类可以有抽象方法和非抽象方法. 接口只能有静态变量和最终变量, 抽象...

  • 2_12.抽象类

    抽象方法: 抽象类无法被实例化. 2.非抽象类继承抽象类,必须实现其中的抽象方法 3.抽象类 的抽象方法不能与pr...

  • 二刷:接口

    1.接口 1.1抽象类与接口 1.2抽象类 抽象类中可以有实体方法也可以没有 一个抽象类继承另外一个抽象类,那么此...

  • 10.抽象类的特点

    抽象类的特点 抽象方法只能在抽象类里面 抽象类和抽象方法必须被abstract修饰 抽象类不能创建对象(不能实例化...

网友评论

      本文标题:抽象类与抽象方法

      本文链接:https://www.haomeiwen.com/subject/ryxmqttx.html