抽象类与抽象方法

抽象类:

  • 受到关键词abstract修饰的类就是一个抽象类

  • 抽象类代表没有人能够创建出该类的实例,但可以使用抽象类来声明引用类型给多态使用

  • 抽象类不能被实例化

  • 抽象类代表此类必须要被继承过

抽象方法

  • 受到关键词abstract修饰的方法就是一个抽象类

  • 抽象的方法没有实体

         声明是:public abstract void fun(); //没有方法体所以直接以分号结束
         //不需要使用{}这个方法体

抽象类中不一定要包含abstrace方法。也就是了,抽象中可以没有abstract方法。一旦类中包含了abstract方法,那类该类必须声明为

abstract类。

package com.lang.oop.demo04;
 //受到abstract修饰的类就是抽象类
public abstract class Action {
    //抽象类里面可以写普通方法
    public void fun(){
        System.out.println("fun Running");
    }

    //抽象方法必须写到抽象类里面
     public abstract void fun1();

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


}
package com.lang.oop.demo04;

public class A extends Action{
    //抽象类的子类需要重写抽象类里面的方法
    @Override
    public void fun1() {
        System.out.println("fun1 Running");
    }
}
package com.lang.oop.demo04;

public abstract class B extends Action {
    //如果抽象类的子类不需要重写抽象方法时,需要把该类变成抽象类
}
package com.lang.oop.demo04;

public class Test {
    public static void main(String[] args) {
       //不能new这个抽象类,只能靠子类去实现它;约束!
        A a = new A();
        a.fun1();
    }
}

抽象类与其他具体类、接口的比较

与具体类比较

//抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
//允许(但不要求)抽象类包含抽象成员。
//抽象类不能被密封。

与接口比较
抽象类表示该类中可能已经有一些方法的具体定义,但是接口就仅仅只能定义各个方法的界面(方法名,参数列表,返回类型),并不关

心具体细节。

接口是引用类型的,和抽象类的相似之处有三点:

  • 不能实例化;
    包含未实现的方法声明;
    派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)。 
    

抽象类与接口紧密相关。然而接口又比抽象类更抽象,这主要体现在它们的差别上:

类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。

抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。

抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。

抽象类是对象的抽象,然而接口是一种行为规范。

抽象类里面可以有非抽象方法但接口里只能有抽象方法 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创

建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变

量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所

有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口

(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象

的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类

实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由

于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof

运算符可以用来决定某对象的类是否实现了接口

posted @ 2021-07-12 16:32  海风不咸  阅读(166)  评论(0)    收藏  举报