Day35--抽象类

Day35--抽象类

抽象类: abstract 修饰符可修饰方法和类。修饰方法则为抽象方法;修饰类则为抽象类。

抽象类中可以无抽象方法,但有抽象方法的类须声明为抽象类。

抽象类不能用 new 关键字创建对象,他是用来让子类继承的。

抽象方法,只有方法的声明,没有方法的实现,他是用来让子类实现的。

子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类。

示例:

当在Action类的修饰符内添加abstract,这个类就是抽象类

package com.liu.oop.demo08;
//抽象类 abstract
public abstract class Action {
}

方法也可以只写名字和返回值,不写如何具体的实现。

​ 创建 doSomething方法

package com.liu.oop.demo08;
//抽象类 abstract
public abstract class Action {

    
    //约束---有人帮我们写具体内容,就不用在这里写的很详细
    //abstract   抽象方法,只有方法名字,没有方法的实现
    public abstract void doSomething();
}

如何重写这个方法?

新建Action的子类A类

​ 此时立刻报错

package com.liu.oop.demo08;

public class A extends Action {
}
//报错原因:A类必须声明为抽象,或者实现Action的抽象方法doSomething

抽象类,它的子类必须要实现它的方法;或者子类是抽象**

在A里面,重写doSomething方法

package com.liu.oop.demo08;

public class A extends Action {
    @Override
    public void doSomething() {
        
    }
}

拓展:extends是有局限性的,它是单继承,只能有一个父类,有时无法满足我们的需求。这时,我们可以用接口

接口可以多继承

抽象类是无法被new实例化的

示例:

package com.liu.oop;


import com.liu.oop.demo08.A;
import com.liu.oop.demo08.Action;

public class Application {
    public static void main(String[] args) {

        new Action();//报错
    }
}

有抽象方法,它的类必然是抽象类

package com.liu.oop.demo08;
//抽象类 abstract
public  class Action {


    //约束---有人帮我们写具体内容,就不用在这里写的很详细
    //abstract   抽象方法,只有方法名字,没有方法的实现
    public abstract void doSomething();//---------报错
}

抽象类的方法可以不是抽象的

下面的代码里面,meaningless不是抽象方法,但是可以存在

package com.liu.oop.demo08;
//抽象类 abstract
public abstract class Action {


    //约束---有人帮我们写具体内容,就不用在这里写的很详细
    //abstract   抽象方法,只有方法名字,没有方法的实现
    public abstract void doSomething();

    public void meaningless(){
        
    }
}

总结:

1.不能 new 这个抽象类,只能靠子类去实现它;约束!
2.抽象类中可以写普通的方法。
3.抽象方法必须在抽象类中。
抽象的抽象:约束。

posted @ 2024-11-21 20:25  1hahahahahahahaha  阅读(1)  评论(0编辑  收藏  举报