Java的抽象类实例化

简介

《Java编程思想》书中定义抽象类:“包含抽象方法的类”。即如果一个类含有抽象方法,则称这个类为抽象类。
抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以一般不能用抽象类创建对象。

// 抽象类
public abstract class ClassName {
    // 抽象方法:只有声明,而没有具体的实现
    abstract void fun();
}

注意有些类是有abstract修饰,但是没有abstract方法,比如Android AIDL的内部静态abstract类Stub

如何实现抽象类的实例化

上面说到一般情况下abstract类是不能够实例化,但下面两种情形下是可以的

通过abstract 父类的引用来指向子类的实例,子类A继承abstract 父类B,B aa=new A(“a”);

```
abstract class B {
    private String str;

    public B(String a) {
        this.str=a;
        System.out.println("父类已经实例化" + str);
    }

    public abstract void play();
}

public class A extends B{

    public A(String a) {
        super(a);
        System.out.println("子类已经实例化");
    }

    @Override
    public void play() {
        System.out.println("我实现了父类的方法");
    }

    public static void main(String[] args) {
        B aa=new A("a");
    }
}
```

Android中的AIDL有个例子,AIDL的Stub类

public interface IBookManager extends android.os.IInterface
{
    /** Local-side IPC implementation stub class. */
    public static abstract class Stub extends android.os.Binder implements com.vv.ipc.IBookManager
    {
        private static final java.lang.String DESCRIPTOR = "com.vv.ipc.IBookManager";
        /** Construct the stub at attach it to the interface. */
        public Stub()
        {
        this.attachInterface(this, DESCRIPTOR);
        }
        ......
    }
}

// 匿名类实例化,Stub的构造函数有使用this调用方法
private Binder mBinder = new IBookManager.Stub() {
......
}

抽象类和Interface的区别

在Java中,可以通过两种形式来体现OOP面向对象的抽象:接口(interface)和抽象类(abstract)

接口是一种极度抽象的类型,它比抽象类更加“抽象”。一般情况下不在接口中定义变量。两者之前还是有一定区别

比较对象修饰符变量作用域方法继承使用场景
abstract classabstract无要求可以存在abstract方法和非abstract 方法,public或者protected作用域extends只能继承一个abstract class适用于对一种事物的抽象,即对类抽象,包括类的属性、行为。如果是这类就继承它
interfaceinterface必须是 public static final变量必须是public abstract方法implements可以同时实现很多接口适用于对类局部行为的抽象,如果有这个行为就实现它。

PS: OOP - Object Oriented Programming,

  • 19
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值