Ivan Petr 4 years ago
parent
commit
c6c96e0856
6 changed files with 56 additions and 4 deletions
  1. 6 0
      .idea/vcs.xml
  2. 24 1
      .idea/workspace.xml
  3. 3 1
      src/Figure.kt
  4. 7 0
      src/Main.kt
  5. 1 0
      src/Movable.kt
  6. 15 2
      src/Rect.kt

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 24 - 1
.idea/workspace.xml

@@ -1,7 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ChangeListManager">
-    <list default="true" id="b9a6b32c-5578-4410-bafa-6b56507d845c" name="Default Changelist" comment="" />
+    <list default="true" id="b9a6b32c-5578-4410-bafa-6b56507d845c" name="Default Changelist" comment="">
+      <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/Figure.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/Figure.kt" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/Main.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/Main.kt" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/Movable.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/Movable.kt" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/Rect.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/Rect.kt" afterDir="false" />
+    </list>
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -16,8 +23,13 @@
       </list>
     </option>
   </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
   <component name="ProjectId" id="20i3zOracRcUAqzmxlDFJAh5iSe" />
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
   <component name="PropertiesComponent">
+    <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
     <property name="settings.editor.selected.configurable" value="editor.preferences.fonts.default" />
   </component>
   <component name="RunDashboard">
@@ -86,4 +98,15 @@
     </task>
     <servers />
   </component>
+  <component name="Vcs.Log.Tabs.Properties">
+    <option name="TAB_STATES">
+      <map>
+        <entry key="MAIN">
+          <value>
+            <State />
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
 </project>

+ 3 - 1
src/Figure.kt

@@ -1,3 +1,5 @@
-open class Figure(val id: Int) {
+abstract class Figure(val id: Int) {
+    // мы не знаем площади абстрактной фигуры, но это не мешает нам определить метод
+     abstract fun area(): Float
 
 }

+ 7 - 0
src/Main.kt

@@ -1,3 +1,10 @@
 fun main() {
 
+    // интерфейсы удобно использовать в коллекциях
+    val figures: Array<Movable>
+    val movable: Movable = Rect(0,0,1,1)
+    movable.move(1,1)
+    val f: Figure = Rect(0,0,1,1)
+    println(f.area())
+
 }

+ 1 - 0
src/Movable.kt

@@ -1,3 +1,4 @@
 interface Movable {
+    // заказ на реализацию некоторых функций
     fun move(dx: Int, dy: Int)
 }

+ 15 - 2
src/Rect.kt

@@ -1,3 +1,16 @@
-class Rect(val width: Int, val height: Int) : Figure(0) {
-    //constructor(rect: Rect) : this(rect.width, rect.height)
+class Rect(var x: Int, var y: Int, val width: Int, val height: Int) : Movable, Figure(0) {
+    var color: Int = -1
+    lateinit var name: String // значение на момент определения неизвестно
+    // дополнительный конструктор вызывает основной
+    constructor(rect: Rect) : this(rect.x, rect.y, rect.width, rect.height)
+
+    // нужно явно указывать, что вы переопределяете метод
+    override fun move(dx: Int, dy: Int) {
+        x += dx; y += dy
+    }
+
+    // для каждого класса area() определяется по-своему
+    override fun area(): Float {
+        return (width*height).toFloat()
+    }
 }