13 ответов:
tl; dr
class Cопределяет класс, как и в Java или C++.object Oсоздает синглтон объектOкак экземпляр некоторого анонимного класса; он может использоваться для хранения статических членов, которые не связаны с экземплярами некоторого класса.object O extends Tделает объектOэкземплярtrait T; затем вы можете передатьOвезде, aTожидается.- если есть
class C, тогдаobject C- это компаньон объекта классаC; обратите внимание, что объект спутник не автоматически экземпляраC.Также см. документацию Scala на объект и класс.
использование в качестве хоста статических членов
чаще всего, вам нужен
objectудерживать методов и значений/переменных, которые должны быть доступны без создания экземпляра некоторый класс. Это использование тесно связано сstaticучастники на Java.object A { def twice(i: Int): Int = 2*i }затем вы можете вызвать метод, используя
A.twice(2).если
twiceбыли членом какого-то классаA, тогда вам нужно будет сначала сделать экземпляр:class A() { def twice(i: Int): Int = 2 * i } val a = new A() a.twice(2)вы можете видеть, как это избыточно, как
twiceне требует каких-либо данных для конкретного экземпляра.использование в качестве специального именованного экземпляра
вы также можете использовать
objectсам по себе как некоторый специальный экземпляр класса или признака. Когда вы делаете это, ваш объект должен расширить некоторыеtraitдля того, чтобы стать экземпляром подкласса ее.рассмотрим следующий код:
object A extends B with C { ... }это объявление сначала объявляет анонимный (недоступный) класс, который расширяет оба
BиC, и создает один экземпляр этого класса с именемA.это значит
Aсмогите быть передано к функциям ожидая объекты типаBилиCилиB with C.дополнительные возможности
objectсуществуют также некоторые особенности объектов в Scala. Я рекомендую прочитать официальная документация.
def apply(...)включает обычный синтаксис метода без имениA(...)def unapply(...)позволяет создавать пользовательские шаблоны соковыжималки- если сопровождающий класс то же имя, объект принимает на себя особую роль при разрешении неявных параметров
A
classопределение, описание. Он определяет тип с точки зрения методов и состава других типов.An
object- это одноэлементный объект-экземпляр класса, который гарантированно будет уникальным. Для каждогоobjectв коде создается анонимный класс, который наследует от всех объявленных вами классовobjectдля реализации. Этот класс нельзя увидеть из исходного кода Scala , хотя вы можете получить его через отражение.есть отношения между
objectиclass. Объект называется сопутствующим объектом класса, если они имеют одно и то же имя. Когда это происходит, каждый имеет доступ к методамprivateвидимость в другом. Однако эти методы не импортируются автоматически. Вы либо должны импортировать их явно, либо префикс их с именем класса/объекта.например:
class X { // class X can see private members of object X // Prefix to call def m(x: Int) = X.f(x) // Import and use import X._ def n(x: Int) = f(x) private def o = 2 } object X { private def f(x: Int) = x * x // object X can see private members of class X def g(x: X) = { import x._ x.o * o // fully specified and imported } }
объект имеет ровно один экземпляр (вы не можете позвонить
new MyObject). Вы можете иметь несколько экземпляров класса.
как было объяснено многими,
objectопределяет одноэлементный экземпляр. Единственное, что в ответах здесь, что я считаю, упущено, это то, чтоobjectслужит нескольким целям.
это может быть сопутствующий объект для
class/trait, содержащий то, что можно считать статическими методами или методами удобства.он может действовать так же, как модуль, содержащий связанные / вспомогательные типы и определения, так далее.
он может реализовать интерфейс, расширяя
classили один или несколькоtraits.он может представлять собой случай
sealed traitэто не содержит никаких данных. В этом отношении он часто считается более правильным, чемcase classбез параметров. Частный случай asealed traitСcase objectimplementors-это более или менее Scala-версия перечисления.он может выступать в качестве доказательства
implicitприводом логика.он вводит одноэлементный тип.
это очень мощная и общая конструкция. Что может быть очень запутанным для начинающих Scala, так это то, что одна и та же конструкция может иметь совершенно разные применения. И еще
objectможет служить многие из этих различных применений все сразу, что может быть еще более запутанным.
определение объекта в Scala похоже на определение класса в Java, который имеет только статические методы. Однако в Scala объект может расширять другой суперкласс, реализовывать интерфейсы и передаваться так, как если бы он был экземпляром класса. (Так что это похоже на статические методы в классе, но лучше).
формальная разница -
- вы не можете предоставить параметры конструктора
- это не типа - вы не можете создать экземпляр с помощью оператора new. Но он может иметь поля, методы, расширять суперкласс и смешивать черты.
разница в использовании:
- Scala не имеет статических методов или полей. Вместо этого вы должны использовать
object. Вы можете использовать его с или без связанного класса. В 1-м случае это называется сопутствующий объект. Ты должен ... :
- использовать то же имя для класса и объекта
- поместите их в один и тот же исходный файл.
для создания программы вы должны использовать метод main в
object, а неclass.object Hello { def main(args: Array[String]) { println("Hello, World!") } }вы также можете использовать его, как вы используете одноэлементный объект в java.
The объект ключевое слово создает новый одноэлементный тип, который похож на класс что только один именованный экземпляр. Если вы знакомы с Java, объявив объект в Scala это очень похоже на создание нового экземпляра анонимного класса.
Scala не имеет эквивалента Java static сайта, и объект часто используется в Scala, где вы можете использовать класс со статическими членами в Java.
объект это класс, но он уже имеет (есть) экземпляр, поэтому вы не можете вызвать
new ObjectName. С другой стороны, класс это просто тип, и это может быть экземпляр, вызвавnew ClassName().
класс Scala такой же, как класс Java, но scala не дает вам никакого метода ввода в классе, как основной метод в java. Основной метод, связанный с ключевым словом object. Ключевое слово object можно рассматривать как создание одноэлементного объекта класса, определенного неявно.
дополнительная информация проверьте эту статью ключевое слово класса и объекта в программировании scala
в скале, нет
staticконцепции. Так скала создает одноэлементный объект, чтобы обеспечить точку входа для выполнения программы. Если вы не создадите одноэлементный объект, ваш код будет успешно скомпилирован, но не будет производить никаких выходных данных. Методы, объявленные внутри Одноэлементного объекта, доступны глобально. Одноэлементный объект может расширять классы и признаки.Одноэлементный Объект Scala Пример
object Singleton{ def main(args:Array[String]){ SingletonObject.hello() // No need to create object. } } object SingletonObject{ def hello(){ println("Hello, This is Singleton Object") } }выход:
Hello, This is Singleton Objectв scala, когда у вас есть класс с тем же именем, что и одноэлементный объект, он называется companion class, а одноэлементный объект называется companion object.
класс-компаньон и его объект-компаньон должны быть определены в одном исходном файле.
Scala Сопутствующий Объект Пример
class ComapanionClass{ def hello(){ println("Hello, this is Companion Class.") } } object CompanoinObject{ def main(args:Array[String]){ new ComapanionClass().hello() println("And this is Companion Object.") } }выход:
Hello, this is Companion Class. And this is Companion Object.в scala класс может содержать:
1. Элемент данных
2. Метод элемента
3. Конструктор Блок
4. Вложенный класс
5. Информация о супер классе и т. д.
необходимо инициализировать все переменные экземпляра в классе. Нет по умолчанию масштаб. Если область доступа не указана, она является общедоступной. Должен быть объект, в котором определен метод main. Это обеспечивает отправную точку для вашей программы. Здесь мы создали пример класса.
пример Скала класса
class Student{ var id:Int = 0; // All fields must be initialized var name:String = null; } object MainObject{ def main(args:Array[String]){ var s = new Student() // Creating an object println(s.id+" "+s.name); } }извините, я слишком поздно, но я надеюсь, что это поможет вам.
объект равен статическому классу в Java для некоторых расширений, статические характеристики означают, что статический класс не должен создавать объект при помещении в JVM,он может использоваться его именем класса напрямую
Если вы исходите из фона java, концепция класса в scala похожа на Java, но класс в scala не может содержать статические члены.
объекты в scala являются одноэлементным типом вы вызываете методы внутри него, используя имя объекта, в scala объект является ключевым словом, а в java объект является экземпляром класса
класс и объект: класс-это определение, которое описывает все атрибуты сущности или объекта. А объект-это экземпляр класса.
Comments