美文网首页
Java-----抽象方法

Java-----抽象方法

作者: 会写代码的小猿猴 | 来源:发表于2021-12-21 16:04 被阅读0次

    抽象类是Java中非常简单但很重要的一个知识点,本来觉得简单不想写的,但觉得学习不分简易,还是那句话,万丈高楼平地起,还是老老实实打好基础,学习本文之前,建议先观看我的上一篇文章Java-----继承

    什么是抽象类

    含有抽象方法的类都叫抽象类。
    那什么是抽象方法呢?
    抽象方法:将共性的行为(方法)抽取到父类之后,发现该方法的实现逻辑无法在父类中给出具体明确,该访法就可以定义为抽象方法。(声明时需要在方法的返回值类型前面加上abstract关键字)

    抽象类中需要注意的点

    这里注意点就不死记硬背了,我也写一个小的案例来说明需要注意的地方
    小案例
    需求:定义猫类(Cat)和狗类( Dog )
    猫类成员方法: eat (猫吃鱼) drink (喝水... )
    狗类成员方法: eat (狗吃肉少drink (喝水... )
    分析:
    1.猫类和狗类中存在共性内容,应向上抽取出一个动物类( Animal )
    2.父类Animal中 ,无法将eat方法具体实现描述清楚,所以定义为抽象方法
    3.抽象方法需要存活在抽象类中,将Animal定义为抽象类
    4.让Cat和Dog分别继承Animal ,写eat方法
    5.测试类中创建Cat和Dog对象,调用方法测试
    接下来我们根据分析一步步走,先定义父类Animal ,并在里面实现两个方法。

    public abstract class Animal {
        public void drink() {
            System.out.println("喝水");
        }
    
        public abstract void eat();
    }
    

    定义两个方法时发现drink()方法里面清楚都是要做喝水的行为,但是eat()方法一个要吃鱼,一个要吃肉,所以无法确定具体需求,只能定义为抽象方法,因为抽象方法只能在抽象类中,所以需要在class前面加上abstract将Animal类变成抽象类。
    接下来定义猫类和狗类去继承父类Animal。
    Cat.java

    public class Cat extends Animal{
        @Override
        public void eat() {
            System.out.println("猫吃鱼");
        }
    }
    

    Dog.java

    public class Dog extends Animal{
        @Override
        public void eat() {
            System.out.println("狗吃肉");
        }
    }
    

    我们在写的时候发现继承了Animal后,子类中必须重写它的抽象方法eat().
    接下来写个简单的测试类进行测试
    Test.java

    public class Test {
        public static void main(String[] args) {
            Cat c = new Cat();
            c.eat();
            c.drink();
            Dog d = new Dog();
            d.eat();
            d.drink();
        }
    }
    

    测试结果:


    image.png

    总结:

    • 抽象方法必须存在于抽象类中,具有抽象方法的类称为抽象类。
    • 继承抽象类的子类必须实现父类中所有的抽象方法,实现后可以重写父类抽象方法,如果不重写,自身也必须为抽象类。
    • 抽象类不能被实例化(不能创建抽象类的对象)
    • 抽象类中可以没有抽象方法,但是有抽象方法的类必须生命为抽象类。
      抽象类和抽象方法都非常简单,很好理解,需要记住它的这几个注意事项,以免在开发过程中踩坑,顺便扩充一个知识点,抽象类在设计模式中有非常经典的应用,叫做模板设计模式。
      模板设计模式:把抽象类整体就可以看做成一个模板 ,模板中不能决定的东西定义成抽象方法让使用模板的类(继承抽象类的类)重写抽象方法实现需求。模板设计模式内部有模板方法,不允许被更改,需要用final关键字修饰。
      这里就自己理解一下,只可意会,不可言传了。

    ps:

    final关键字
    final关键字是最终的意思,可以修饰(方法,量,类)
    final修饰的特点:

    • 修饰方法: 表明该方法是最终方法,不能被重写
    • 修饰变量:表明该变是常量,不能再次被赋值
    • 修饰类:表明该类是最终类,不能被继承
    • 修饰基本类型: final 修饰的是基本类型 ,该变量数据值不能发生改变
    • 修饰引用类型: final修饰的是引用类型,该变量的地址值不能发生改变,但是地址里面的内容是可以发生改变的。

    相关文章

      网友评论

          本文标题:Java-----抽象方法

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