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.

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

         

原文地址:https://www.cnblogs.com/Demo1589/p/7356151.html