重学java 21.面向对象 抽象

发布于:2024-04-24 ⋅ 阅读:(27) ⋅ 点赞:(0)

这条路一个人走到黑,无味无畏也无谓

                                         —— 24.4.23

一、抽象类的介绍

1.抽象类时怎么来的?

        抽取共性方法,放到父类中,发现方法没办法确定具体实现,因为每个子类对此方法的实现细节不一样,此时方法说不清,道不明,可以定义成抽象方法

2.抽象方法所在的类一定是抽象类

3.关键字:

        abstract

4.定义抽象方法:

        修饰符 abstract 返回值类型 方法名(参数):

5.抽象类:

        public abstract class 类名{}

6.注意:

        a、抽象方法所在的类一定是抽象类

        b、抽象类中不一定非得有抽象方法

        c、子类继承抽象父类时,需要重写父类中所有的抽象方法,不然编译报错

        d、抽象类不能new对象(实例化),只能通过new子类对象去调用子类重写后的父类方法

7.抽象类和抽象方法的示例

public abstract class Animal {
    public abstract void eat();
}

8.抽象类的作用

        抽象类可以看作是一类事物的标准,要求只要是属于这一类中的,都必须要拥有抽象类中的方法,必须进行实现,至于怎么证明实现,怎么证明拥有?——>重写

        至于方法如何实现,看子类重写之后如何实现方法体

9.抽象类的基本使用

父类:

public abstract class Animal {
    public abstract void eat();
    public abstract void drink();
}

子类1:

public class Dog extends Animal{    // ALT+回车
    @Override
    public void eat() {
        System.out.println("小狗吃骨头");
    }

    @Override
    public void drink() {
        System.out.println("小狗喝水");
    }
}

子类2:

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

    @Override
    public void drink() {
        System.out.println("小猫喝水");
    }
}

测试类:

public class Demo115Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
        dog.drink();
        System.out.println("————————————————");
        Cat cat = new Cat();
        cat.eat();
        cat.drink();
    }
}

运行结果

二、抽象的注意事项

1.抽象类不能直接new对象,只能创建非抽象子类的对象

2.抽象类中不一定有抽象方法,但是抽象方法所在的类一定是抽象类

3.抽象类的子类,必须重写父类中的所有抽象方法,否则,编译报错,除非该子类也是抽象类

4.抽象类中可以有成员变量、构造方法、成员方法(比普通类中可以多一个抽象方法

5.抽象类中可以有构造方法,这个构造方法是供子类创建对象时,初始化父类属性使用的

抽象父类:

public abstract class Animal {
    public abstract void eat();
    public abstract void drink();
}

抽象子类

public abstract class Dog extends Animal {

    @Override
    public void eat() {
    }

    @Override
    public void drink() {
    }
}

抽象父类

public abstract class Employee {
    private String name;
    private int age;

    public Employee() {
    }

    public Employee(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 work();
}

抽象子类

public class Teacher extends Employee {
    public Teacher() {
    }

    public Teacher(String name, int age) {
        super(name, age);
    }

    @Override
    public void work() {
        System.out.println("一切都会好的");
    }
}

测试类

public class Demo116Test {
    public static void main(String[] args) {
        Teacher t1 = new Teacher("小明",17);
        System.out.println(t1.getName()+" "+t1.getAge());
    }
}