当前位置:网站首页>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
边栏推荐
- 2011-11-21 training record personal training (III)
- Svg optimization by svgo
- 2310. 个位数字为 K 的整数之和
- Applet (subcontracting)
- Rebuild my 3D world [open source] [serialization-1]
- 信息與熵,你想知道的都在這裏了
- 2020 "Lenovo Cup" National College programming online Invitational Competition and the third Shanghai University of technology programming competition
- 浅谈Label Smoothing技术
- [code practice] [stereo matching series] Classic ad census: (6) multi step parallax optimization
- Introduction Guide to stereo vision (5): dual camera calibration [no more collection, I charge ~]
猜你喜欢

2020 "Lenovo Cup" National College programming online Invitational Competition and the third Shanghai University of technology programming competition

Solutions of ordinary differential equations (2) examples

Node collaboration and publishing

Nodejs modularization

Blogger article navigation (classified, real-time update, permanent top)

信息與熵,你想知道的都在這裏了

Composition of applet code

Summary of "reversal" problem in challenge Programming Competition
![[beauty of algebra] singular value decomposition (SVD) and its application to linear least squares solution ax=b](/img/ee/8e07e2dd89bed63ff44400fe1864a9.jpg)
[beauty of algebra] singular value decomposition (SVD) and its application to linear least squares solution ax=b

Wechat H5 official account to get openid climbing account
随机推荐
优先级队列(堆)
Talking about label smoothing technology
scipy. misc. imread()
Nodemon installation and use
2310. The number of bits is the sum of integers of K
Array, date, string object method
What is a firewall? Explanation of basic knowledge of firewall
高性能Spark_transformation性能
fs. Path module
Node collaboration and publishing
notepad++
Huber Loss
Codeforces round 684 (Div. 2) e - green shopping (line segment tree)
[technical school] spatial accuracy of binocular stereo vision system: accurate quantitative analysis
驾驶证体检医院(114---2 挂对应的医院司机体检)
Meta tag details
OpenGL - Coordinate Systems
Rebuild my 3D world [open source] [serialization-3] [comparison between colmap and openmvg]
STM32简易多级菜单(数组查表法)
Composition of applet code