zoukankan      html  css  js  c++  java
  • abstract 类和 abstract 方法 (抽象类与抽象方法)

    抽象一直以来都是人们所神往的艺术形式,这点从梵高,毕加索等艺术家的身上就可以看出。抽象所代表的是一种形式上的美感,颇有一种虚无缥缈只可意会不可言传的意味。但是JAVA中的抽象类与抽象方法相对而言就更加直接了,它给我的感觉更像是文章的副标题,本身不发挥什么作用,但是却可以从中展开许多功能。

      用关键字abstract修饰的类称为abstract类(抽象类),比如:

    abstract classA{

    }

    用关键字abstract修饰的方法称为abstract方法(抽象方法),例如:

    abstract int min (int x,int y);

      对于abstract方法只允许声明,不允许实现(因为没有方法体)(毕竟叫抽象,当然不能实实在在的让你实现),并且不允许使用final和abstract同时修饰一个方法或者类,也不允许使用static修饰abstract方法。也就是说,abstract方法只能是实例方法,不能是类方法。

          既然abstract类和方法这么特殊,我们就必须对比一下它和普通类与方法之间的区别了:

    1.abstract类中可以有abstract方法

     abstract类中可以有abstract方法,也可以有非abstract方法

     非abstract类中不可以有abstract方法

    2.abstract类不能使用new运算符创建对象

    但是如果一个非抽象类是抽象类的子类,这时候我们想要创建该对象呢,这时候它就必须要重写父类的抽象方法,并且给出方法体,这也就是说明了为什么不允许使用final和abstract同时修饰一个类或者方法的原因。

    重点常考!:final和abstract,private和abstract,static和abstract,这些是不能放在一起的修饰符,因为abstract修饰的方法是必须在其子类中实现(覆盖),才能以多态方式调用,以上修饰符在修饰方法时期子类都覆盖不了这个方法,final是不可以覆盖,private是不能够继承到子类,所以也就不能覆盖,static是可以覆盖的,但是在调用时会调用编译时类型的方法,因为调用的是父类的方法,而父类的方法又是抽象的方法,又不能够调用,所以上的修饰符不能放在一起。

    3.abstract类的子类

    如果一个非abstract类是abstract类的子类,它必须重写父类的abstract方法,也就是去掉abstract方法的abstract修饰,并给出方法体。

    如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承父类的abstract方法。

    下面举个例子:

    abstract class GirlFriend{                                //抽象类,封装了两个行为标准

    abstract void speak();

    abstract void cooking();

    }

    class ChinaGirlFriend extends GirlFriend{

    void speak(){

    System.out.println("你好");

    }

    void cooking(){

    System.out.println("水煮鱼");

    }

    }

    class AmercanGirlFriend extends GirlFriend{

    void speak(){

    System.out.println("hello");

    }

    void cooking(){

    System.out.println("roast beef");

    }

    }

    class boy{

    GirlFriend friend;

    void setGirlFriend(GirlFriend f){

    friend=f;

    }

    void showGirlFriend(){

    friend.speaking();

    friend.cooking();

    }

    }

    public class text{

    public static void main(String args[]){

    GirlFriend girl =new ChineseGirlFriend();      //这里girl是上转型对象

    Boy boy=new boy();

    boy.setGirlFriend(girl);

    boy.showGirlFriend();

    girl=new AmericanGirlFriend();             //girl 是上转型对象

    boy.setGirlFriend(girl);

    boy.showGirlFriend();

    }

    }
    ————————————————
    版权声明:本文为CSDN博主「踏一回月」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_40302611/article/details/80426381

  • 相关阅读:
    【Lintcode】112.Remove Duplicates from Sorted List
    【Lintcode】087.Remove Node in Binary Search Tree
    【Lintcode】011.Search Range in Binary Search Tree
    【Lintcode】095.Validate Binary Search Tree
    【Lintcode】069.Binary Tree Level Order Traversal
    【Lintcode】088.Lowest Common Ancestor
    【Lintcode】094.Binary Tree Maximum Path Sum
    【算法总结】二叉树
    库(静态库和动态库)
    从尾到头打印链表
  • 原文地址:https://www.cnblogs.com/lwgok1003/p/11711714.html
Copyright © 2011-2022 走看看