当前位置:网站首页>Kotlin introductory notes (V) classes and objects, inheritance, constructors
Kotlin introductory notes (V) classes and objects, inheritance, constructors
2022-07-05 09:14:00 【Meng Meng Mu Xi】
Preface : This tutorial is best done with JAVA Study on the basis of
One 、 Classes and objects
use class Keyword to declare a class , And java identical .
eg.
(1) Define a Person class :
class Person {
var name = ""
var age = 0
fun eat() {
println(name + " is eating. He is " + age + " years old.")
}
}(2) Instantiation Person This class :
val p = Person()kotlin Give up java Of new keyword . The reason for doing this , Because you call the constructor of a class , Your intention can only be to initialize this class .
(3)main Function :
fun main() {
val p = Person()
p.name = "Jack"
p.age = 19
p.eat()
}Run a screenshot :

Two 、 Inherit
I have to mention that kotlin Several characteristics of :
Kotlin Characteristics of :
Kotlin By default, all non abstract classes cannot be inherited
eg:
Now I define a Student class , Want it to inherit just Person class
class Student {
var sno = ""
var grade = 0
}Just now Person Class cannot be inherited , You need to add open keyword , As shown in the figure below :
open class Person {
var name = ""
var age = 0
fun eat() {
println(name + " is eating. He is " + age + " years old.")
}
}Combined with the open The keyword is followed by the compiler ,Person This class is designed specifically for inheritance . such Person Class is allowed to be inherited .
And then let Student Class can inherit Person class , as follows :
class Student : Person() {
var sno = ""
var grade = 0
}Kotlin Of Inherited keywords are also heavy extends Change into : , This is for those who have learned C# My friends are more familiar . But why is there a pair of parentheses after the inherited class ? Because it involves Java Provisions for inherited characteristics , The constructor of the subclass must call the constructor of the parent class , This rule is in Kotlin We should also abide by . It will be explained later Primary constructor and The secondary constructor 了 .
3、 ... and 、 Constructors
(1) Primary constructor
Each class will have a main constructor without parameters by default ( Same as java Constructor for ). Of course, you can also display the declaration parameters . But notice , The primary constructor has no body !
class Student(val sno : String , val grade : Int) : Person() {
}Instantiation :
val student = Student("a123",5)But , The primary constructor has no body , How to implement some logic ?
Kotlin It provides us with a init Structure , All the logic in the main constructor can be written in it :
class Student (val sno : String , val grade : Int) : Person() {
init {
println("sno is " + sno)
println("grade is " + grade)
}
}(2) The secondary constructor
Kotlin Regulations ,
- Any class has only one primary constructor , But there can be many times constructors .
- The secondary constructor can instantiate a class , But it has a function body .
- When a class already has Primary constructor And then there is The secondary constructor , All secondary constructors must call the primary constructor ( Including indirect calls ).
eg.
Learn from the above ,Person The class of can also be written like this :
open class Person(val name : String , val age : Int) {
fun eat() {
println(name + " is eating. He is " + age + " years old.")
}
}So we let Student class To inherit Person class
class Student (val sno : String , val grade : Int , name : String , age : Int) : Person(name , age) {
constructor(name : String ,age : Int) : this("",0,name,age) {
}
constructor() : this("" , 0) {
}
}The secondary constructor is by constructor Keywords to define , Here we define two secondary constructors : The first secondary constructor receives name and age Parameters of ; The second constructor does not accept any parameters , It passes through this Called our first constructor , And will name and age Initial value of Fu . Because of the second one The secondary constructor Indirectly call the first The secondary constructor , So it is still legal .
So now we have three ways to be right Student initialization :
val student1 = Student()
val student2 = Student("Tom",15)
val student3 = Student("a123",5,"Jack",18)A special case :
There are only secondary constructors in a class , There is no primary constructor . This is a rare case , But in Kotlin Is allowed . When a class does not explicitly define a primary constructor and defines a secondary constructor , It just doesn't have a primary constructor .
class Student : Person {
constructor(name : String , age : Int) : super(name,age){
}
}First ,Student There is no definition shown after the class Primary constructor , At the same time, because of the definition The secondary constructor , So now Student There is no primary constructor . So since there is no primary constructor , Inherit Person Class, there is no need to add brackets . Because there is no primary constructor , The secondary constructor can only call the constructor of the parent class , Call the parent constructor and Java identical , Use super keyword . No more talk here .
If you like this series , You might as well pay attention ! Thank you for watching !
Reference resources :
《 First line of code Android ( The third edition )》 --- Guo Lin
边栏推荐
- 2310. 个位数字为 K 的整数之和
- Confusing basic concepts member variables local variables global variables
- Use and programming method of ros-8 parameters
- OpenGL - Model Loading
- 2309. 兼具大小写的最好英文字母
- notepad++
- 生成对抗网络
- scipy. misc. imread()
- Solutions of ordinary differential equations (2) examples
- Summary and Reflection on issues related to seq2seq, attention and transformer in hands-on deep learning
猜你喜欢

牛顿迭代法(解非线性方程)

Wxml template syntax

fs. Path module

Ros- learn basic knowledge of 0 ROS - nodes, running ROS nodes, topics, services, etc
![Introduction Guide to stereo vision (3): Zhang calibration method of camera calibration [ultra detailed and worthy of collection]](/img/d8/39020b1ce174299f60b6f278ae0b91.jpg)
Introduction Guide to stereo vision (3): Zhang calibration method of camera calibration [ultra detailed and worthy of collection]
![[code practice] [stereo matching series] Classic ad census: (6) multi step parallax optimization](/img/54/cb1373fbe7b21c5383580e8b638a2c.jpg)
[code practice] [stereo matching series] Classic ad census: (6) multi step parallax optimization

nodejs_ 01_ fs. readFile

Confusing basic concepts member variables local variables global variables

Shutter uses overlay to realize global pop-up

Priority queue (heap)
随机推荐
Hi Fun Summer, play SQL planner with starrocks!
【PyTorch Bug】RuntimeError: Boolean value of Tensor with more than one value is ambiguous
2310. 个位数字为 K 的整数之和
Ecmascript6 introduction and environment construction
12. Dynamic link library, DLL
ROS learning 1- create workspaces and function packs
Use arm neon operation to improve memory copy speed
Codeworks round 681 (Div. 2) supplement
22-07-04 西安 尚好房-项目经验总结(01)
Beautiful soup parsing and extracting data
AdaBoost use
Mengxin summary of LIS (longest ascending subsequence) topics
MPSoC QSPI flash upgrade method
C#绘制带控制点的Bezier曲线,用于点阵图像及矢量图形
Codeworks round 638 (Div. 2) cute new problem solution
Shutter uses overlay to realize global pop-up
Codeworks round 639 (Div. 2) cute new problem solution
Svg optimization by svgo
Applet data attribute method
Confusing basic concepts member variables local variables global variables