

- Главная
 - Каталог
 - Интернет технологии
 - Kotlin | Вопросы собесов
 
Статистика канала
Полная статистикаchevron_rightObject является корневым классом для всех остальных классов. Это значит, что все классы в Java неявно наследуются от Object, если явно не указано другое.  
==), но может быть переопределён для логического сравнения.       
    
             class Person {
         String name;
         
         Person(String name) {
             this.name = name;
         }
         
         @Override
         public boolean equals(Object obj) {
             if (this == obj) return true;
             if (obj == null || getClass() != obj.getClass()) return false;
             Person person = (Person) obj;
             return name.equals(person.name);
         }
     }
     public class Main {
         public static void main(String[] args) {
             Person p1 = new Person("Alice");
             Person p2 = new Person("Alice");
             System.out.println(p1.equals(p2)); // true
         }
     }
     {}
    
   
HashMap. Если переопределяем equals(), нужно переопределить и hashCode().       
    
             @Override
     public int hashCode() {
         return Objects.hash(name);
     }
     {}
    
  
    
             @Override
     public String toString() {
         return "Person{name='" + name + "'}";
     }
     {}
    
   
Class, описывающий класс объекта.       
    
             System.out.println(p1.getClass().getName()); // Person
     {}
    
  
Cloneable, иначе будет CloneNotSupportedException.       
    
             class Person implements Cloneable {
         String name;
         
         Person(String name) {
             this.name = name;
         }
         
         @Override
         protected Object clone() throws CloneNotSupportedException {
             return super.clone();
         }
     }
     {}
    
   
try-with-resources и close().       
    
             @Override
     protected void finalize() throws Throwable {
         System.out.println("Object is being garbage collected");
     }
     {}
    
  
wait() – приостанавливает поток до вызова notify(). notify() – пробуждает один поток. notifyAll() – пробуждает все потоки.    
    
             class SharedResource {
         synchronized void doWait() throws InterruptedException {
             wait();
         }
         
         synchronized void doNotify() {
             notify();
         }
     }{}
    
Ставь 👍 и забирай 📚 Базу знанийAny (аналог Object в Java).  
Это значит, что любой класс в Kotlin имеет 3 базовых метода:  
===)  
    
        class Person(val name: String)
fun main() {
    val p1 = Person("Alice")
    val p2 = Person("Alice")
    println(p1 == p2) // false (разные объекты)
}{}
    
Как переопределить equals() для сравнения по значениям?  
    
        class Person(val name: String) {
    override fun equals(other: Any?): Boolean {
        return other is Person && this.name == other.name
    }
}
fun main() {
    val p1 = Person("Alice")
    val p2 = Person("Alice")
    println(p1 == p2) // true (теперь сравниваются значения)
}{}
    
    
        val p = Person("Alice")
println(p.hashCode()) // Разный для каждого объекта{}
    
Как переопределить hashCode()?  
    
        class Person(val name: String) {
    override fun hashCode(): Int {
        return name.hashCode() // Генерируем хеш-код на основе имени
    }
}{}
    
ClassName@hashCode
    
        val p = Person("Alice")
println(p.toString()) // Person@4e25154f (неудобный вывод){}
    
Как сделать красивый вывод?  
    
        class Person(val name: String) {
    override fun toString(): String {
        return "Person(name=$name)"
    }
}
val p = Person("Alice")
println(p.toString()) // Person(name=Alice){}
    
    
        data class User(val name: String)
fun main() {
    val u1 = User("Alice")
    val u2 = User("Alice")
    println(u1 == u2) // ✅ true (по значениям)
    println(u1.hashCode()) // ✅ Одинаковый для объектов с одинаковыми данными
    println(u1.toString()) // ✅ User(name=Alice)
}{}
    
Ставь 👍 и забирай 📚 Базу знанийextension properties), но только с кастомным get (геттером).  
val), потому что нельзя создать field внутри расширения.    
    
        val String.firstChar: Char
    get() = this[0]
fun main() {
    println("Kotlin".firstChar) // K
}{}
    
var нужно и get(), и set(), но всё равно нельзя использовать field.  
    
        var StringBuilder.lastChar: Char
    get() = this[length - 1]
    set(value) {
        this.setCharAt(length - 1, value)
    }
fun main() {
    val sb = StringBuilder("Hello")
    println(sb.lastChar) // o
    sb.lastChar = '!'
    println(sb) // Hell!
}{}
    
    
        var String.someProperty: String = "Default" // Ошибка!{}
    
Ставь 👍 и забирай 📚 Базу знанийCanvas.draw() или анимации.  
Синхронные вызовы I/O (чтение файлов, базы данных, сети) – если, например, в onDraw() идёт обращение к диску или базе данных.  
Неоптимальный layout – глубокая иерархия ViewGroup, частые перерасчёты макетов (measure/layout).  
Coroutines, Executors, WorkManager
onDraw(), использовать ViewStub, RecyclerView.  
ViewGroup, использовать ConstraintLayout.
Ставь 👍 и забирай 📚 Базу знаний
    
        public class Example {
    private int a = 10;   // ❌ Только внутри класса
    int b = 20;           // ✅ Видно внутри пакета (package-private)
    protected int c = 30; // ✅ Видно в пакете и наследниках
    public int d = 40;    // ✅ Доступно везде
}{}
    
package-private заменён на internal.
Пример Kotlin  
    
        class Example {
    private val a = 10   // ❌ Только в этом классе
    internal val b = 20  // ✅ Видно в модуле
    protected val c = 30 // ✅ Видно в наследниках
    public val d = 40    // ✅ Видно везде (по умолчанию)
}{}
    
    
        public class User {
    private String name; // ❌ Скрыто от других классов
    public User(String name) {
        this.name = name;
    }
    public String getName() { // ✅ Доступ через метод
        return name;
    }
}{}
    
Для методов  
    
        class Animal {
    protected void makeSound() { // ✅ Доступен только в наследниках
        System.out.println("Животное издаёт звук");
    }
}
class Dog extends Animal {
    public void bark() {
        makeSound(); // ✅ Разрешено, потому что `protected`
        System.out.println("Гав-гав!");
    }
}{}
    
Для классов  
    
        public class Car { } // ✅ Доступен везде
class Engine { } // ❌ Только в этом пакете{}
    
В Kotlin можно делать private class, но только внутри другого класса.  
    
        class Car {
    private class Engine // ❌ Только в этом классе
}{}
    
Ставь 👍 и забирай 📚 Базу знанийОтзывы канала
Каталог Телеграм-каналов для нативных размещений
Kotlin | Вопросы собесов — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 2.6K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 5.6, количество отзывов – 0, со средней оценкой 0.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 3216.78 ₽, а за 2 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий