活力 JAVA 旅行七

抽象类和抽象方法

抽象类:为所有生出来的类创建一个公接口。要创建这种公共接口一原因就是,个子要用它自己的方式来实现这个接口。它定了一个本的式,你可以说这是所有的有的。还有一种说,就是 “抽象基类(abstract base class 简化抽象类abstract class)”。当你想要过一个公接口操控组类的时候,就可以使用抽象类了。动态绑机制,那些符合法特征法将会得到用。

如果你有一个像Instrument 这样的abstract class,那么这种的对

是没么意的。也就是说Instrument 只是用来定义接口,而不是

具体实现,因此创建Instrument 没有意,更何况你还可能要

止用这么作。要做到这点,可以让Instrument 的方错误信,但是这样一来就把问题运行时了,因此用户端需要详尽

。更好的还是在编译时发现这个问题

Java 提供了一种被称为“抽象(abstract method)”的机制来解决

这个问题。这是一种完成的方法;这种方只有声明,没有

文。面就是抽象声明:

abstract void f();

含抽象类被称为“抽象类(abstract class)”。如果一个多个抽象,那么这个必须被abstract 的。(否则编译就会报错了。)

然抽象类完成的,那么如果有人想要创建抽象类的对的话,编译又打怎么做?编译全地创建抽象类,所以它会报错此,编译保证抽象类纯粹,而你也不用担心它会被误用了。

如果你继抽象类,而还打创建这个新类的对,那你就必须实现基类所定的全部抽象。如果你不这么做(实可以选择不这么做),那么这个继承下来的就也成了抽象类了,编译你用abstract 词来声明这个的。创建一个不abstract abstract ,是完全可以的。这种技可以用于“不必创建abstract 的方,但是又要创建这个的对”的

 

构造函数的调用顺序

创建派的过程中,基类函数总是先得到用,这样一追溯基类函数都会被调用。这种做是很理的,因为函数有一个它要知道是不是被正确创建了。只能访它自己的成,它看不到基类的成(因为它们通常都是private )。只有基类函数知道怎样初始它的成,同时也只有它权限进初始。因此“把所有的函数用一”就得非常重要了,否则就没法创建了。这就是为么编译制每都要用其基类函数的原因了。如果你不在函数明确基类函数,那编译就会悄悄用那个认的函数。如果没有函数,编译就会报错(要是没有函数,编译会自为你准备一个函数)

 

复杂函数顺序是这样的

1. 基类函数。这是一个递归过程,因此会先创建承体系

后是,以此,直到最后一个继承类

函数

2. 照其声明顺序初始

3. 承类函数文。

 

 

abstract class Glyph {

  abstract void draw();

  Glyph() {

    System.out.println("Glyph() before draw()");

    draw();

    System.out.println("Glyph() after draw()");

  }

}

class RoundGlyph extends Glyph {

   private int radius = 1;

   RoundGlyph(int r) {

    radius = r;

    System.out.println(

      "RoundGlyph.RoundGlyph(), radius = " + radius);

  }

  void draw() {

    System.out.println(

      "RoundGlyph.draw(), radius = " + radius);

  }

}

  public class PolyConstructors {

  private static Test monitor = new Test();

  public static void main(String[] args) {

    new RoundGlyph(5);

    monitor.expect(new String[] {

      "Glyph() before draw()",

      "RoundGlyph.draw(), radius = 0",

      "Glyph() after draw()",

      "RoundGlyph.RoundGlyph(), radius = 5"

    });

  }

}

 

 

1. 其它工作之前,分给这个对会先初始为两

2. 如前面一直在所说的,先基类函数。这时会被覆写的draw( )(是的,在RoundGlyph 函数之前),这

时它发现,第一的影响,radius 还是

3. 数据照它们声明顺序初始

4. 函数

 

一个好的函数应该,“用最的工作把对状态设好,而可能地避免去调用方。”函数一能用的方,就是基类final

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值