欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

4.2 学习总结-I.抽象类

最编程 2024-04-03 07:02:35
...

1.1定义:

抽象类主要用来抽取子类的通用特性,作为子类的模板,它不能被实例化,只能被用作为子类的超类。

2.概括:

有方法声明,没有方法体”的一类方法统称为抽象方法抽象方法用关键字abstract修饰。需要注意的是,如果一个方法已经确定是抽象方法,那么它绝不能再有方法体,即不能出现大括号,而是只需要在()后面添加一个分号即可

3.注意点:拥有抽象方法的类一定是抽象类;但是抽象类不一定有抽象方法

1.2使用场景

 当父类需要定义一个方法,却不能明确该方法的具体实现细节时,可以将该方法定义为abstract,具体实现细节延迟到子类。(让子类重写这个方法)

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 abstract void eat();
}

(若父类中定义了一个抽象方法要求其所有非抽象子类都必须重写该抽象方法。否则会报错)

1.3抽象类的特点

1.abstract关键字 : 

 abstract关键字只能用于修饰类和方法,用于声明抽象类和抽象方法。

格式:

修饰符  abstract class 类名()

修饰符  abstract 返回值类型 方法名(形参例表)

2.抽象类不能被实例化,只能创建其子类对象.

3.  如果某个类继承了一个抽象类,那么这个类有两个选择——要么实现父类所有的抽象方法,要么子类本身也定义成抽象类

4.事例

Animal(父类)

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 void drink(){
        System.out.println("喝水");
    }

    //如果不知道在这个方法中应该写什么,可以通过抽象方法的形式,让子类进行重写
    public abstract void eat();
}

 子类

//子类Cat
public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫在吃鱼");
    }
}

//子类Dog
public class Dog extends Animal{

    @Override
    public void eat() {
        System.out.println("狗在吃骨头");
    }
}

//子类Sleep
public class Sleep extends Animal{
    @Override
    public void eat() {
        System.out.println("山羊在吃草");
    }
}

测试

import jdk.nashorn.internal.ir.CatchNode;

public class TEXT {
    public static void main(String[] args) {
        Dog d=new Dog();
        d.setName("小狗");
        d.setAge(1);
        System.out.println(d.getName()+", "+d.getAge());
        d.eat();
        d.drink();

        Cat c =new Cat();
        c.setName("小猫");
        c.setAge(2);
        System.out.println(c.getName()+", "+c.getAge());
        c.eat();
        c.drink();

        Sleep s=new Sleep();
        s.setName("山羊");
        s.setAge(3);
        System.out.println(s.getName()+", "+s.getAge());
        s.eat();
        s.drink();
    }
}

运行结果

总结:抽象类中我们主要学习其抽象方法的使用,  (抽象类中的成员只比非抽象类多一种——抽象方法。其他都和非抽象类一样)