abstract抽象类

    抽象类

    有些情况下,你希望定义一个超类,该超类定义了一种给定结构的抽象但是不提供任何完整的方法实现。也就是说,有时你希望创建一个只定义一个被它的所有子类共享的通用形式,由每个子类自己去填写细节。这样的类决定了子类所必须实现的方法的本性。这类情形下一种可能发生的情况是超类不能创建一个方法的有意义的实现。

你可以通过指定abstract类型修饰符由子类重载某些方法。这些方法有时被作为子类责任(subclasser responsibility)引用,因为它们没有在超类中指定的实现。这样子类必须重载它们——它们不能简单地使用超类中定义的版本。声明一个抽象方法,用下面的通用形式:
    abstract type name(parameter-list);
    正如你所看到的,不存在方法体。任何含有一个或多个抽象方法的类都必须声明成抽象类。声明一个抽象类,只需在类声明开始时在关键字class前使用关键字abstract。抽象类没有对象。也就是说,一个抽象类不能通过new操作符直接实例化。这样的对象是无用的,因为抽象类是不完全定义的。而且,你不能定义抽象构造函数或抽象静态方法。所有抽象类的子类都必须执行超类中的所有抽象方法或者是它自己也声明成abstract。

abstract class M{
 int a,b;
 M(int i,int j){
  a=i;
  b=j;
 }
 abstract int callme();
 void callmetoo(){     //抽象类中的具体方法是完全可以接受的,且子类不用必须实现
  System.out.println("abstract class");
 }
}
class N extends M{
  N(int i,int j){
  super(i,j);//调用超类构造函数
 }
  int callme(){ //实现抽象类的方法
  return a*b;
 }
}
public class AbstractDemo {
 public static void main(String args[]){
//  M m = new M(10,20);  抽象类不能实例化对象
  M m ; //虽然不能实例化对象,但是可以创建一个该类的引用变量,从而引用任何从该类派生的对象
  N n = new N(10,10);
  m=n;  //将n的引用赋给m
  System.out.println("this is n "+n.callme());
  System.out.println("this is m "+m.callme());
  m.callmetoo();
  n.callmetoo();//调用抽象类的具体方法
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值