zoukankan      html  css  js  c++  java
  • 对抽象类的一些认知

     1 /*
     2 抽象类:
     3  
     4 
     5  
     6 抽象类的应用场景:
     7     我们在描述一类事物的时候,发现该种事物确实存在着某种行为,
     8 但是这种行为目前是不具体的,那么我们可以抽取这种行为 的声明,但是
     9 不去实现该种行为,这时候这种行为我们称作为抽象的行为,我们就需要使用抽象类。
    10  
    11 抽象类的好处: 强制要求子类一定要实现指定的方法。
    12  
    13  
    14 抽象类要注意的细节:
    15     1. 如果一个函数没有方法体,那么该函数必须要使用abstract修饰,把该函数修饰成抽象 的函数。。
    16     2. 如果一个类出现了抽象的函数,那么该类也必须 使用abstract修饰。
    17     3. 如果一个非抽象类继承了抽象类,那么必须要把抽象类的所有抽象方法全部实现。
    18     4. 抽象类可以存在非抽象方法,也可以存在抽象的方法.
    19     5. 抽象类可以不存在抽象方法的。 
    20     5. 抽象类是不能创建对象的。
    21         疑问:为什么抽象类不能创建对象呢?
    22         因为抽象类是存在抽象方法的,如果能让抽象类创建对象的话,那么使用抽象的对象
    23         调用抽象方法是没有任何意义的。
    24     6. 抽象类是存在构造函数的,其构造函数是提供给子类创建对象的时候初始化父类的属性的。
    25  
    26  
    27  
    28 */
    29 //动物类--->抽象类
    30 abstract class Animal{
    31      
    32     String name;
    33  
    34     String  color;
    35  
    36     public Animal(String  name,String color){
    37         this.name = name;
    38         this.color = color;
    39     }
    40      
    41  
    42     //非抽象的方法
    43     public void eat(){
    44         System.out.println(name+"吃粮食");
    45     }
    46  
    47     //移动...
    48     public abstract void run();
    49 }
    50  
    51  
    52  
    53 //狗 是属于动物中一种 
    54 class Dog extends Animal{
    55  
    56     public Dog(String name,String color){
    57         super(name,color);
    58     }
    59  
    60     public void run(){
    61         System.out.println(name+"四条腿跑得很快...");
    62     }
    63 }
    64  
    65  
    66 //鱼 是属于动物中一种
    67 class Fish extends Animal{
    68  
    69  
    70     public Fish(String name,String color){
    71         super(name,color);
    72     }
    73  
    74  
    75     public void run(){
    76         System.out.println(name+"摇摇尾巴游啊游!");
    77     }
    78 }
    79  
    80  
    81 class Demo3 {
    82  
    83     public static void main(String[] args) 
    84     {
    85         /*
    86         Dog d = new Dog("牧羊犬","棕色");
    87         d.run();
    88  
    89         //创建一个鱼对象
    90         Fish f  = new Fish("锦鲤","金黄色");
    91         f.run();
    92         */
    93  
    94         Animal a = new Animal();
    95  
    96     }
    97 }

    抽象类只能作为基类 只有声明部分没有实现部分 作用就是让派生类重写  因为不能实例化 只能用别的类去继承

    在c#中用abstract修饰符说明某方法是抽象方法,除了抽象方法 还允许使用抽象属性

    也需要在属性面前加abstract 需要指出属性的get和set部分 但是不能有实例化代码

     抽象类可以没有抽象方法,但是有抽象方法的类必须定义为抽象类,如果一个子类继承一个抽象类,子类没有实现父类的所有抽象方法,那么子类也要定义为抽象类,否则的话编译会出错的。

    抽象类没有构造方法,也没有抽象静态方法。但是可以有非抽象的构造方法

    抽象类不能被实例化,但是可以创建一个引用变量,类型是一个抽象类,并让它引用非抽象类的子类的一个实例
    不能用final 修饰符修饰

  • 相关阅读:
    VS2010 自动跳过代码现象
    Reverse Linked List II 【纠结逆序!!!】
    Intersection of Two Linked Lists
    Linked List Cycle II
    Remove Nth Node From End of List 【另一个技巧,指针的指针】
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Remove Duplicates from Sorted List
    Linked List Cycle
    Dungeon Game
  • 原文地址:https://www.cnblogs.com/ranzhong/p/13172154.html
Copyright © 2011-2022 走看看