抽象类和抽象方法

概念

抽象方法

  当父类中的方法,在不同子类中有不同的具体实现,那么就可以只声明该方法,而不书写方法体,这样的方法可以称之为抽象方法。

格式

权限修饰符(通常为public) abstract 返回值类型 方法名(参数列表);

抽象类

  通常来说,当一个类中存在了抽象方法,那么该类必须声明为抽象类。当然了,抽象类也可以不存在抽象方法。

格式


权限修饰符 abstract class 类名{

//与正常的类无异,但可以存在抽象方法

}

要点

  1. 抽象类存在构造器,但不可以实例化对象。
  2. 抽象类的子类要么必须重写所有的抽象方法,要么子类也是抽象类。
  3. 抽象类不一定含有抽象方法,但存在抽象方法的一定是抽象类。

范例

父类(抽象类)

package com.blogs.abstracttest;  
  
  
//抽象类  
public abstract class Animal {  
    private String name;  
    private int age;  
  
  
    //构造器,虽然不能实例化对象,但是可以给子类构造方法中直接调用  
    public Animal() {  
  
    }  
  
    public Animal(String name, int age) {  
        this.name = name;  
        this.age = age;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    //抽象方法  
    public abstract void eat();  
  
}

子类1

package com.blogs.abstracttest;  
  
public class Cat extends Animal {  
  
    public Cat() {  
    }  
  
    public Cat(String name, int age) {  
        //这里调用父类(抽象类)的构造器  
        super(name, age);  
    }  
  
  
  
    //重写抽象方法  
    @Override  
    public void eat() {  
        System.out.println("小猫喜欢吃小鱼干!");  
    }  
}

子类2

package com.blogs.abstracttest;  
  
public class Dog extends Animal {  
    public Dog() {  
    }  
  
    public Dog(String name, int age) {  
        //调用父类的构造器  
        super(name, age);  
    }  
  
    //重写抽象方法  
    @Override  
    public void eat() {  
        System.out.println("狗狗喜欢啃骨头!");  
    }  
}

测试类


package com.blogs.abstracttest;  
  
public class AbstractTest {  
  
    public static void main(String[] args) {  
        Cat cat = new Cat("芒果", 2);  
        Dog dog = new Dog("旺财", 1);  
  
        System.out.print(cat.getName() + "今年" + cat.getAge() + "岁,");  
        cat.eat();  
  
        System.out.print(dog.getName() + "今年" + dog.getAge() + "岁,");  
        dog.eat();  
    }  
}

posted @ 2025-03-29 01:00  KK_LOVE  阅读(27)  评论(0)    收藏  举报