Java: многоразовая инкапсуляция с интерфейсом, абстрактным классом или внутренними классами? - PullRequest
1 голос
/ 29 апреля 2010

Я пытаюсь заключить в капсулу. Исключение из интерфейса, статический внутренний класс работает, нестатический внутренний класс не работает, не может понять терминологию: вложенные классы, внутренние классы, вложенные интерфейсы, интерфейс-абстрактный-класс - звучит слишком многократно!

BAD! --- Исключение 'недопустимый тип' из интерфейса, очевидно, потому что значения являются константами (?!)

    static interface userInfo
    {
            File startingFile=new File(".");
            String startingPath="dummy";
            try{
                    startingPath=startingFile.getCanonicalPath();
            }catch(Exception e){e.printStackTrace();}
    }

МНОГИЕ СПОСОБЫ ЭТОГО: Интерфейс, статическое изображение внутреннего класса VS нестатическое изображение внутреннего класса

import java.io.*;
import java.util.*;

public class listTest{
        public interface hello{String word="hello word from Interface!";}

        public static class staticTest{
                staticTest(){}
                private String hejo="hello hallo from Static class with image";
                public void printHallooo(){System.out.println(hejo);}
        }
        public class nonStatic{
                nonStatic(){}
                public void printNonStatic(){System.out.println("Inside non-static class with an image!");}
        }
        public static class staticMethodtest{
                private static String test="if you see mee, you printed static-class-static-field!";
        }

        public static void main(String[] args){
                //INTERFACE TEST
                System.out.println(hello.word);
                //INNNER CLASS STATIC TEST
                staticTest h=new staticTest();
                h.printHallooo();
                //INNER CLASS NON-STATIC TEST
                nonStatic ns=(new listTest()).new nonStatic();
                ns.printNonStatic();
                //INNER CLASS STATIC-CLASS STATIC FIELD TEST
                System.out.println(staticMethodtest.test);
        }
}

OUTPUT

hello word from Interface!
hello hallo from Static class with image
Inside non-static class with an image!
if you see mee, you printed static-class-static-field!

Относящиеся

Ответы [ 6 ]

2 голосов
/ 29 апреля 2010

Проблема в том, что вы пишете код вне метода. Для этого вам нужен класс, и вы должны поместить свой код в метод. Например:

static class UserInfo
{
    public static void myMethod()
    {
        File startingFile = new File(".");
        String startingPath = "dummy";
        try
        {
            startingPath = startingFile.getCanonicalPath();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

Предполагается, что файл java.io.File был импортирован.

Затем вы можете вызвать UserInfo.myMethod ();

Вы также можете импортировать java.util.IOException и перехватывать IOException вместо общего исключения.

Кроме того, классы и интерфейсы начинаются с заглавной буквы в соответствии с соглашениями Java.

РЕДАКТИРОВАТЬ: Чтобы описать ваш недавний комментарий на ваш вопрос:

Используйте интерфейс, если вы хотите, чтобы схожие классы (представляющие разные типы DVD-плееров) имели одинаковую базовую функциональность (воспроизведение DVD, остановка, пауза. Вы используете абстрактный класс аналогично, но когда все классы будут реализованы одни и те же вещи одинаково.

2 голосов
/ 29 апреля 2010

Я думаю, вы хотели сделать это:

static class userInfo
    {
         public static void something() {
            File startingFile=new File(".");
            String startingPath="dummy";
            try{
                    startingPath=startingFile.getCanonicalPath();
            }catch(Exception e){e.printStackTrace();}
         }
    }
1 голос
/ 29 апреля 2010

вы не можете поместить код в интерфейс, интерфейс только описывает, как будет вести себя объект. Даже когда вы используете классы, вы должны помещать этот вид кода в метод, а не непосредственно в тело класса.

0 голосов
/ 29 апреля 2010

Похоже, вы хотите написать class здесь.

0 голосов
/ 29 апреля 2010

Вы не можете иметь код в интерфейсах. Просто метод подписи. Интерфейсы верхнего уровня не могут быть статичными.

Я предлагаю вам начать изучение Java здесь .

0 голосов
/ 29 апреля 2010

Вы не можете иметь реальный код в интерфейсе, только сигнатуры методов и константы.Что ты пытаешься сделать?

...