抽象类

抽象类(abstract)

1. 什么是抽象类和抽象方法?

abstract修饰符可以修饰类(即抽象类),可以修饰方法(即抽象方法)。

1.1 抽象类

//创建一个类,类名Action。用abstract修饰这个类,那么类Action就是抽象类
public abstract class Action{}

1.2 抽象方法

//在抽象类Action中,创建方法,方法名为doSomething。用abstract修饰这个方法,这个方法就是抽象方法
public abstract class Action{
    //正常创建一个普通方法
    //public void doSomething(){}
    
    /*抽象方法
    1.用abstract修饰这个方法。(写法也不同了:abstract抽象方法 ,只有方法的名字,没有方法的实现,让子类去实现)
    2.抽象方法必须写在抽象类中(抽象类中可以写抽象方法和普通方法,抽象类中也可以不写抽象方法)
    */
    public abstract void doSomething();//abstract抽象方法 ,只有方法的名字,没有方法的实现
    
    //抽象类中可以写普通方法
    public void say(){
        System.out.println("Hello");
    }

}

2. 注意点:

2.1 抽象类和抽象方法的一些要点

/*抽象类和抽象方法的一些要点
抽象类特点:
1.不能new抽象类,只能靠子类去实现它:约束!
2.抽象类中可以写抽象方法和普通方法,抽象类中也可以不写抽象方法,但是抽象方法只能在抽象类中写!
3.抽象类中的抽象方法,只有方法的声明,没有方法的实现。抽象方法的实现是让子类(非抽象类)实现的,若子类也是抽象类,则让子子类去实现!
4.抽象类的所有方法,继承了抽象类的子类,子类必须要实现抽象类的方法(重写抽象父类的方法)~ 除非子类也是抽象类,则不用实现,交给子子类实现。
子类继承抽象类,就必须去实现抽象类中没有实现的抽象方法,否则子类也要声明为抽象类。
5.抽象的抽象:约束!

抽象类的局限性:
1.abstract 抽象类:类  extends :单继承,java中没有多继承,但是接口可以多继承
* */

3. 思考

//博客思考
//题1:抽象类既然不能new对象,那么抽象类存在构造器吗?
按照我个人理解,new对象本质是在调用构造器,那么抽象类不能new对象,可能是因为它没有构造器(没有构造器的可能小,因为创建类之后就有了构造器)
答案二:也可能是因为它加了abstract后,不调用构造器!!!!!<=====我觉得是这种
    百度:抽象类是由构造器的(抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。)

//题2:抽象类存在的意义是什么?
节省代码,提高开发效率

4. 代码演示

4.1 抽象类Action

//abstract 抽象类:类  extends :单继承,java中没有多继承,但是接口可以多继承
// 分清楚抽象方法和接口
public abstract class Action /*extends Object*/{

    //public Action(){}

    //约束~有人帮我们实现    abstract抽象方法 ,只有方法的名字,没有方法的实现
    //public abstract void doSomething(){}
    public abstract void doSomething();//抽象方法

    public void run(){
        System.out.println("d");
    }

    public Action(){}

}

4.2 实现抽象类的子类A

4.2.1 子类A不是抽象类

//A要重写Action类中的doSomething()方法

//抽象类的所有方法,继承了抽象类的子类,子类必须要实现抽象类的方法(重写抽象父类的方法)~ 除非子类也是抽象类,则不用实现,交给子子类实现
public class A extends Action{
    @Override
    public void doSomething() {
    }
}

4.2.2 子类A也是抽象类

//继承抽象类的子类A也是抽象类的话,A可以不用去实现抽象类
//抽象类可由子子类(非抽象类)去实现
public  abstract class A extends Action{
}
posted @ 2022-04-07 17:35  intelliyu  阅读(92)  评论(0编辑  收藏  举报