zoukankan      html  css  js  c++  java
  • JAVA中抽象类的使用

      抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。抽象类体现的就是一种模板模式的设计,抽象父类可以只定义需要使用的某些方法,把不能实现的某些部分抽象成抽象方法,留给其子类去实现。具体来说,抽象类的使用有以下几点要注意:

      1.抽象方法和抽象类必须使用abstract来修饰,其中抽象方法不能有方法体。

      2.抽象类不能被实例化。

      3.抽象类可以包含成员变量,方法(普通方法或抽象方法),构造器(抽象类的构造器不能用于创建实例,主要是被其子类调用),初始化块,内部类(接口,枚举)这五种成分。

      4.含有抽象方法的类只能定义成抽象类,而抽象类中可以没有抽象方法。

      下面看具体的使用例子:

    // 先在文件Animal.java 中定义一个抽象类
    package animal;
    public abstract class Animal
    {
        public String name;
        public Animal(String name)
        {
            this.name = name;
        }
        public abstract void eat();
        public abstract void move();
    }

        然后分别定义三个子类来实现这个抽象父类:

    package animal;
    public class Dog extends Animal
    {
        public Dog(String name)
        {
            super(name);
        }
        
        public void eat()
        {
            System.out.println(name + " eat meat and grass.");
        }
        
        public void move()
        {
            System.out.println(name + " move with legs.");
        }
        
    }
    
    
    package animal;
    public class Bird extends Animal
    {
        public Bird(String name)
        {
            super(name);
        }
        
        public void eat()
        {
            System.out.println(name + " eat insect.");
        }
        
        public void move()
        {
            System.out.println(name + " move with wings.");
        }
        
    }
    
    
    package animal;
    public class Fish extends Animal
    {
        public Fish(String name)
        {
            super(name);
        }
        
        public void eat()
        {
            System.out.println(name + " eat algae.");
        }
        
        public void move()
        {
            System.out.println(name + " move with tail.");
        }
        
    }

       可以看到三个子类继承了父类的一个成员变量name, 并且分别实现了两个抽象方法 eat() 和 move(). 然后我们定义一个测试类,并运行结果:

    package animal;
    public class Summary
    {
        public static void main(String[] args)
        {
            Dog animal1 = new Dog("Shepherd");
            Bird animal2 = new Bird("Sparrow");
            Fish animal3 = new Fish("carp");
            System.out.println(animal1.name);
            animal1.eat();
            animal1.move();
            System.out.println(animal2.name);
            animal2.eat();
            animal2.move();
            System.out.println(animal3.name);
            animal3.eat();
            animal3.move();
        }
    }
    
    
    
    运行结果如下:
    
    Shepherd
    Shepherd eat meat and grass.
    Shepherd move with legs.
    Sparrow
    Sparrow eat insect.
    Sparrow move with wings.
    carp
    carp eat algae.
    carp move with tail.

      那么初步的抽象类的使用就是这样了,具体的细节还需要去多看书多实践。

             

  • 相关阅读:
    [PA2014]Muzeum
    [TJOI2015]概率论
    To Do List
    【洛谷4172】 [WC2006]水管局长(LCT)
    HNOI2019退役记
    hdu 2159 FATE
    USACO 2019 January Contest, Platinum 题解
    luogu4774 [NOI2018]屠龙勇士
    NOI 2019游记
    loj #3145. 「APIO 2019」桥梁
  • 原文地址:https://www.cnblogs.com/Demo1589/p/7356151.html
Copyright © 2011-2022 走看看