Стварэнне асобніка абстрактнага класа або ананімнага класа

як наконт гэтага кода тут ён стварае аб'ект абстрактнага класа або ананімнага класа? скажыце, калі ласка, я трошкі блытаюць тут.

public abstract class AbstractDemo {

    abstract void showMessage();
    abstract int add(int x,int y);

    public int mul(int x,int y){
        return x+y;
    }


    public static void main(String[] args) {
        AbstractDemo ad = new AbstractDemo() {

            @Override
            void showMessage() {
               //TODO Auto-generated method stub

            }

            @Override
            int add(int x, int y) {
               //TODO Auto-generated method stub
                return 0;
            }
        };

        System.out.println(ad.mul(10, 12));
        System.out.println(ad.getClass());
    }

}
11
Звярніце ўвагу на тое, што вы перакрываючы абстрактныя метады. Гэта ананімны клас.
дададзена аўтар Lion, крыніца
Што ваш апошні пытанне? Як вы толькі хочаце ведаць, што аб'явы гэта ананімны клас?
дададзена аўтар Kooki, крыніца
Ці спрабавалі Вы скампіляваць гэты код? Які быў вынік?
дададзена аўтар user1907906, крыніца
Выхад 22 клас com.mj.javademo.AbstractDemo $ 1
дададзена аўтар DroidNinja, крыніца

8 адказы

Вы ствараеце ананімным клас, які пашырае свой абстрактны клас.

У адрэзалі ніжэй, вы разьзяўляеце AbstractDemo і забяспечыць рэалізацыю яго абстрактныя метады.

new AbstractDemo() {
    @Override
    void showMessage() {
       //TODO Auto-generated method stub
    }

    @Override
    int add(int x, int y) {
       //TODO Auto-generated method stub
        return 0;
    }
};
26
дададзена
атрымаў гэта дзякуючы браценік
дададзена аўтар DroidNinja, крыніца

Вось што адбылося ў гэтай кароткай і невінаваты кавалак кода:

AbstractDemo ad = new AbstractDemo() {

            @Override
            void showMessage() {
               //TODO Auto-generated method stub

            }

            @Override
            int add(int x, int y) {
               //TODO Auto-generated method stub
                return 0;
            }
        };
  1. New class was defined (without a name, so called anonymous class)
  2. This new class extends AbstractDemo class
  3. Abstract methods of AbstractDemo were overriden in this new class
  4. New instance of this new class was created and assigned to ad variable

Больш падрабязна пра ананімных класаў у Java тут </а>.

5
дададзена
Superb Тлумачэнне.
дададзена аўтар SAM, крыніца

You can not create an instance of an abstract class.
You can create an instance of a class that extents your abstract class.

Увесь сэнс абстрактнага класа з'яўляецца тое, што гэта абстрактны - <�моцны> вы вызначылі інтэрфейс, але не рэалізацыю . Без рэалізацыі асобнік класа не будзе вырабляць значны ці карысны вынік. Калі гэта адбудзецца/будзе мець сэнс ствараць аб'екты гэтага класа, то вы проста не хочаце выкарыстоўваць абстрактны клас у першую чаргу.

Вы можаце выкарыстоўваць паняцце ананімнага класа для асобніка, як ніжэй:

AbstractDemo abstractDemo  = new AbstractDemo() {
            @Override
            void showMessage() {
               //TODO Auto-generated method stub
            }
            @Override
            int add(int x, int y) {
               //TODO Auto-generated method stub
                return 0;
            }
        }; 
4
дададзена
добры адказ я зараз разумею.
дададзена аўтар DroidNinja, крыніца
@Override//Here
void showMessage() {
   //TODO Auto-generated method stub
}

@Override//here
int add(int x, int y) {
   //TODO Auto-generated method stub
    return 0;
}

у першую чаргу вы павінны ведаць, што вы не можаце стварыць асобніка для абстрактны клас , тут вы проста якая стварае ананімны клас , які дзейнічаць як ўнутраны клас , які пашырае абстрактны клас таму яго належыць да вашага ананімны клас .

1
дададзена

Вы <�моцны> перакрываючы абстрактныя метады у ананімны клас .. менавіта таму вы можаце стварыць аб'ект. Глядзі ніжэй.

        @Override//Here
        void showMessage() {
           //TODO Auto-generated method stub

        }

        @Override//here
        int add(int x, int y) {
           //TODO Auto-generated method stub
            return 0;

<�Моцны> рэалізацыя з Абстрактны клас можа быць рэалізаваны, як вы робіце.

0
дададзена
дзякуй .. да ..
дададзена аўтар DroidNinja, крыніца

Аб'ект аўтаномнага абстрактнага класа не можа быць зроблены, але ананімны абстрактны аб'ект класа можа быць зроблены, таму што яна забяспечвае рэалізацыю тады і там.

Прычына, чаму Java не дазваляе аб'ект абстрактнага класа, таму што ён не мае якую-небудзь рэалізацыі любога метаду або для некаторых з метадаў, так як вы маглі б мець аб'ект няпоўнага класа. Але Ананімныя чынам тут вы даеце яму рэалізацыю таму яна дазваляе мець аб'ект.

Той жа выпадак з інтэрфейсам

 AbstractDemo ad = new AbstractDemo() {

            @Override
            void showMessage() {
               //TODO Auto-generated method stub

            }

            @Override
            int add(int x, int y) {
               //TODO Auto-generated method stub
                return 0;
            }
        };

Тут AbstractDemo клас з'яўляецца абстрактным, але яго клас рэалізацыі можа мець аб'ект так, тут ананімны код класа рэалізуе код, такім чынам, выдатна дазволена мець аб'ект.

Больш капацца ў ім, ўбачыць ніжэй код, MyAbstractClass з'яўляецца абстрактным класам, цяпер, калі вы закаментаваць

abstract void play();

то ён працуе выдатна, Ява дазваляе зрабіць аб'ект абстрактнага класа, але калі вы раскаментаваць, што, як ён адмаўляе, таму што гэта не мае ніякага ажыццяўлення аб гэтым метадзе, так адмаўляе, каб зрабіць аб'ект.

abstract class MyAbstractClass {
    private String name;

    public MyAbstractClass(String name)
    {
        this.name = name;
    }

    public String getName(){
        return this.name;
    }
    abstract void play();



}


public class Test2 {

    public static void main(String [] args)
    {
        MyAbstractClass ABC = new MyAbstractClass("name") {
        };

        System.out.println(ABC.getName());
    }

}

старанна праверыць, што {} пасля канструктара выкліку, гэта азначае, што патрабуецца не больш рэалізацыі, ці вы можаце змяніць яго адзін метад або больш.

0
дададзена
выхад com.mj.javademo.AbstractDemo $ 1, таму што гэта азначае, што гэта мае на ўвазе, які аб'ект?
дададзена аўтар DroidNinja, крыніца

Ваш AbstractDemo не больш абстрактныя пасля яго абстрактныя метады рэалізаваны ў ананімным класе. Яго так жа добра, як кажуць:

Class AbstractDemoImpl extends AbstractDemo {

    void showMessage() {
           //TODO Auto-generated method stub
    }
    int add(int x, int y) {
           //TODO Auto-generated method stub
            return 0;
    }
}
0
дададзена

Тут мы забяспечваем рэалізацыю абстрактнага class.By часу, калі мы робім аб'ект, мы забяспечваем яго рэалізацыю і перакуліўшы ўвесь абстрактны methods.In выпадку абстрактнага класа, якія маюць толькі канкрэтны метад. Ніжэй у прыкладзе

abstract class MyAbstractClass {
    private String name;

    public MyAbstractClass(String name)
    {
        this.name = name;
    }

    public String getName(){
        return this.name;
    }
}

public class Test {

    public static void main(String [] args)
    {
        MyAbstractClass ABC = new MyAbstractClass("name") {
        };

        System.out.println(ABC.getName());
    }
}

Тут мы проста зрабіць аб'ект, выкарыстоўваючы які выклікае канструктар як {}.

  1. мы даказваем рэалізацыю з дапамогай ананімнага класа.

2.Which нічога, акрамя класа без імя, якое нам трэба зрабіць, як, калі мы робім аб'ект.

  1. Так, мы робім аб'ект абстрактнага класа, давёўшы РЭАЛІЗАЦЫЮ падчас выканання.

4.It адкрыць адказ, як, чаму абстрактны клас дазваляе канструктар? але мы не можам стварыць аб'ект гэтага.

5.another пытанне, звязанае з абстрактным класам, што мы можам мець толькі статычны блок ў абстрактным class.what з'яўляецца гэты сэнс?

6.Only статычны блок, таму што мы хочам, каб загрузіць толькі адзін раз без пашырэння і стварэння аб'екта гэтага.

7.After кампіляцыі кода мы выкарыстоўваем, каб атрымаць .class кожнага канкрэтнага класа, абстрактны клас або інтэрфейс.

Узнікае пытанне 8.Next тут Чаму Java людзі дазваляюць статычны выйгрыш блока ў інтэрфейсе?

0
дададзена