Абстрактные классы и методы в Java, Наследовании

Когда вы создаете код на python и используете kv, сама библиотека будет искать файл .kv в том же каталоге, где находится файл .py, поэтому вам не нужно начинать с 'presentation = Builder.load_file (" simplekivy. kv ") '

это можно решить, изменив код питона на:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.graphics import Line

class MainScreen(Screen):
    pass

class AnotherScreen(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass

class TouchInput(Widget):
    def on_touch_down(self, touch):
        with self.canvas:
            touch.ud["line"] = Line(points=(touch.x, touch.y))
    def on_touch_move(self, touch):
        touch.ud["line"].points += (touch.x, touch.y)
#don't need this
#presentation = Builder.load_file("simplekivy.kv")

class SimpleKivy(App):
    pass
    #I commented on that part of your code and added a 'pass' above
    #def build(self):
    #    return presentation

if  __name__ == "__main__":
    SimpleKivy().run()
10
задан S.Lott 6 January 2009 в 18:19
поделиться

5 ответов

В Java, abstract аннотация класса указывает, что класс нельзя непосредственно инстанцировать. Класс мог быть объявлен abstract просто, потому что это никогда нельзя инстанцировать (возможно, это содержит только статические методы), или потому что его подклассы нужно инстанцировать вместо этого.

Это не требование это abstract классы содержат abstract методы (инверсия верна: класс, содержащий один или несколько abstract методы должны быть abstract.)

Вопрос того, необходимо ли копировать определение абстрактного метода, мог бы быть воспринят как вопрос о стиле - но мне будет трудно придумывать аргумент в пользу дублирования определения (единственный аргумент, который я могу придумать, находится в случае, где иерархия классов могла бы изменить семантику или использование метода, и таким образом требуется обеспечить дополнительный javadoc в классе B.)

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

35
ответ дан 3 December 2019 в 13:28
поделиться

Они функционально равны, но первый предпочтен, потому что это короче и не странно.

8
ответ дан 3 December 2019 в 13:28
поделиться

Пойдите с № 1. Перезапись объявления метода в дочернем классе сбивает с толку. И Вам на самом деле не нужны никакие абстрактные методы в абстрактном классе, независимо от того, абстрактен ли родитель или нет.

2
ответ дан 3 December 2019 в 13:28
поделиться

Так, вопрос: Который предпочтен, когда sub классификация абстрактного класса в Java и не хотят обеспечивать реализацию?

a) отметьте подкласс как краткий обзор также

b) отметьте подкласс, столь же абстрактный также, И перепишите сигнатуру метода, отмеченную как краткий обзор?

Я пошел бы для первого:

a) Подкласс Mark как краткий обзор также.

У первого уже есть объявление абстрактного метода, нет никакого смысла в повторении его.

2
ответ дан 3 December 2019 в 13:28
поделиться

Вы правы, эти два случая эквивалентны. Случай 1) более прост, случай 2) является дублированием кода - избегают его. Но может быть одна причина сделать так:

Если метод в классе A не возвращается String но позволяет, говорят, что C, класс B может переопределить его (начиная с Java 5) с более определенным типом возврата, позволяет, говорят, что D (класс расширяет C):

public abstract class A {
  public abstract C giveSum();
}

public abstract class B extends A {
  public abstract D giveSum();
}

public class C {
  ...
}

public class D extends C {
  ...
}
1
ответ дан 3 December 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: