比喻:画家在外面看到事物,先速写一下,画个大概,然后回到画室再具体画细节。

   写论文时,先摘要,写摘要也很需要水平,然后再根据摘要写论文,补充论文的具体内容。

而abstract类就像摘要和速写一样。

1.abstract类中可以有abstract方法

abstract class A{
  abstract int min(int x,int y);  //没有方法体
}

当然,abstract类也可以不写abstract方法,只是这样做,就浪费了abstract,白写了

2.abstract类不能用new运算符创建对象

A a;可以用abstract类声明对象

newA();但是不可以new它 (声明对象可以但不能new这个类)

3. abstract类的子类

我的理解:abstract类必须有子类,就像速写一样,必须要把它的细节画具体,才能是一副完整美丽的画;就像写论文一样,光写摘要,不写论文的内容,那就不是一篇论文了,那摘要写了也没什么意义了。

     所以abstract类必须要有子类,才有意义(这也就是为什么不能用final关键字修饰abstract类和abstract方法的原因,abstract类必须要有子类,不然就没意义了)

书上:如果一个非abstract类是abstract类的子类,它必须重写父类的abstract方法,即去掉abstract方法的abstract修饰,并给出方法体。如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承父类的abstract方法。

           不允许使用final和abstract类同时修饰一个方法或类,也不允许使用static修饰abstract方法,即abstract方法必须是实例方法。

class B extends A{
 int min(int x,int y){
}

abstract类的子类必须重写abstract类的abstract方法(就是去掉abstract关键字,剩下的抄一遍都可以,方法体不写也行),比如这个例子:我必须要方法min能求最小值,所以重写了A类中的min方法。

特殊情况:如果abstract类的子类也是个abstract类,那么无所谓,你愿意重写就重写,要不愿意重写就啥也不写,老老实实继承;

    如果子类不是abstract类,也就不会让你老老实实继承,要求你必须得重写。(所以一定不能用final修饰抽象方法 ,因为一定会重写)

4.abstract类的对象作上转型对象

我只要用A a;(用A声明一个对象a就可以了),我也不需要去newA,而且也不能够new抽象类A;

但我可以直接a =new B();,不用去newA,因为对象的上转型对象也能够去调用重写的方法。

5.理解abstract类

注重行为标准,而不是细节,细节留给子类

两个程序理解abstract类:

package P128继承与多态抽象类的改写;
abstract class  动物{
   abstract void cry();
}
class 狗 extends 动物{

    void cry() {
        System.out.println("汪汪....");
    }
}
class 猫 extends 动物{
    void cry(){
        System.out.println("喵喵....");
    }
}
public class Example5_111 {
    public static void main(String[] args) {
        动物 a;
        a=new 狗();
        a.cry();
        a=new 猫();
        a.cry();

    }

}
abstract  class GirlFriend{ //抽象类,封装了两个行为标准
    abstract void speak();
    abstract void cooking();
}
class ChinaGirlFriend extends GirlFriend{
    void speak(){
        System.out.println("你好");
    }
    void cooking(){
        System.out.println("水煮鱼");
    }
}
class AmericanGirlFriend extends GirlFriend{
    void speak(){
        System.out.println("hello");
    }
    void cooking() {
        System.out.println("roast beef");
    }
}


class Boy{
    GirlFriend friend;
    void setGirlFriend(GirlFriend f){
        friend = f;
    }
    void showGirlFriend(){
        friend.speak();
        friend.cooking();
    }

}

public class Example5_12 {
    public static void main(String[] args) {
    GirlFriend girl=new ChinaGirlFriend();
    Boy b1=new Boy();
    b1.setGirlFriend(girl);
    b1.showGirlFriend();
    girl =new AmericanGirlFriend();
    b1.setGirlFriend(girl);
    b1.showGirlFriend();
    }

}

TRANSLATE with x

English

Arabic

Hebrew

Polish

Bulgarian

Hindi

Portuguese

Catalan

Hmong Daw

Romanian

Chinese Simplified

Hungarian

Russian

Chinese Traditional

Indonesian

Slovak

Czech

Italian

Slovenian

Danish

Japanese

Spanish

Dutch

Klingon

Swedish

English

Korean

Thai

Estonian

Latvian

Turkish

Finnish

Lithuanian

Ukrainian

French

Malay

Urdu

German

Maltese

Vietnamese

Greek

Norwegian

Welsh

Haitian Creole

Persian

 

 

TRANSLATE with

COPY THE URL BELOW

Back

EMBED THE SNIPPET BELOW IN YOUR SITE


Enable collaborative features and customize widget: Bing Webmaster Portal

Back