zoukankan      html  css  js  c++  java
  • Java中的抽象

    什么是抽象类?

    如果一个类没有足够的信息去描述一个具体的对象,那么这样的类我们就称它为抽象类。这很好理解,就如同动物是一个很广泛的概念,由于在动物这个类里,我们无法用很详细的信息去描述狗狗这个具体的对象。所以,动物类就是抽象类,而狗、猫这些真实存在的物种,就是具体的对象。

    为什么要用抽象类?

    定义抽象类就是用于继承的。和一般类的继承相比,子类继承抽象类必然会实现抽象方法。由于抽象方法都是没有方法体的,也就是说,抽象方法并没有写死,我们可以根据自己的需求去写。这样就很灵活、方便。

    例一:普通类的继承

    举个例子,假设一般的Animal类里有个方法run(),方法体是“四条腿跑得真快”,Fish这个类继承Animal类。此时我们不仅需要手动重写run方法,而且还要改写方法体,不然直接打印的结果就是“四条腿跑得真快”。然而,鱼有腿吗?所以我们需要把下面代码中的super.run手动删掉,并改写方法体为“游得真快”

    public class Animal {
        public  void run(){
            System.out.println("四条腿跑得真快");
        }
    }
    
    
    public class Fish extends Animal {
        @Override
        public void run() {
            super.run();       
            //改写
            System.out.println("游得真快");
        }
    }
    
    
    public class Test {
        public static void main(String[] args) {
            Fish fish = new Fish();
            fish.run();
        }
    }
    
    
    四条腿跑得真快
    游得真快
    
    

    例二:抽象类的继承

    由于抽象类中的抽象方法没有方法体,因此子类继承抽象类的时候会自动实现抽象类中的方法,即不用我们自己书写,会自动帮我们重写。我们只需改写即可。和普通类的继承相比,抽象类是不是更方便,更简洁?

    public abstract class Animal {
        public abstract void run();
    }
    
    
    public class Fish extends Animal{
    
        @Override
        public void run() {
            System.out.println("游得真快");
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Fish fish = new Fish();
            fish.run();
        }
    }
    
    游得真快
    

    抽象类的特点

    1. 用abstract修饰
    2. 不能实例化对象
    3. 如果子类继承抽象类,那么子类必须实现抽象类(重写抽象类中的抽象方法)
    4. 如果子类不想实现抽象类,那么子类也必须得是抽象类才行(加上abstract修饰)

    理解抽象类

    1. 抽象是相对于具体而言的,比如张三、李四是具体的,那么人这个统称是抽象的。狗、猫是具体的,动物这个统称是抽象的。橘子、苹果是抽象的,水果这个统称是抽象的。
    2. 抽象,用一句话来说就是,先提炼归纳出一些事物的本质,然后将这些事物的共有属性归结为一个统称的过程。
    3. 抽象类,就是拥有一些事物共同属性的类。如铅笔、橡皮、胶带,我们可以用一个文具类进行表示
    4. 抽象类不能被实例化,因为我们无法直接从这些共性中生出个性。就如同饮料类,你说new出来饮料的是雪碧还是冰红茶?加上抽象方法没有方法体,你实例化后调用它根本没有任何意义。sun公司考虑到这一点,同时也为了代码规范,干脆不让你new了,因此当你new抽象类的时候,会强制报错。不过我们可以通过匿名内部类解决,这个后期再讲。
    5. 动物有天上飞的、地上跑的、水里游的,动物有不同的类别,这就做多态。这些飞鸟、游鱼、走兽,虽然外观习性都不同,但本质上都是动物,因此动物这个类就是抽象类。所以我们可以得出这样的结论,抽象类的目的就是实现多态中的共同点。

    抽象方法的特点

    1. 用abstract修饰的方法
    2. 抽象方法没有方法体,即方法名后面没有{}
    3. 必须由子类重写

    抽象类和抽象方法的关系

    1. 抽象类中可以没有抽象方法,但这相当于废物类了
    2. 如果一个类中有抽象方法,那么这个类必须是抽象类
  • 相关阅读:
    (爱加密系列教程十四)利用无效字节码指令引发逆向工具崩溃(一)
    (爱加密系列教程十三) 如何防止工具(八门神器)进行内存修改
    (爱加密系列教程十二) 如何防止jd-gui查看代码
    (爱加密系列教程十一) 关于某银行apk的安全分析
    超简教程:Xgboost在Window上的安装(免编译)
    自己动手实现机器学习算法:神经网络(附源代码)
    Spark 源码解析:TaskScheduler的任务提交和task最佳位置算法
    Spark 源码解析 : DAGScheduler中的DAG划分与提交
    16.Spark Streaming源码解读之数据清理机制解析
    14:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密
  • 原文地址:https://www.cnblogs.com/anycall/p/10758738.html
Copyright © 2011-2022 走看看