- 类是属性和行为的集合
- 属性也叫成员变量:名词,用来描述事物的外在特征
- 行为也叫成员方法:动词,表示事物能做什么
面向对象的三大特征:
- 封装
- 继承
- 多态
- 在Scala中,用class来创建类,用new来创建对象。
- 创建一个Person类,并创建它的对象,然后将对象打印到控制台上。
1. 使用IDEA创建一个scala项目,并创建object类。
2. 设置项目名,包名,项目地址。注意不要使用中文,空格,特殊符号作为名字及路径名。
定义和访问成员变量
object Base34 {
//Person就是一个类名理解为变量名
//首字母大写!
//类名一般来说是名词
//1.定义类
class Person(){}
class Student() {
var name: String = "小花"
var age: Int = 18
}
def main(args: Array[String]): Unit = {
//2.实例化对象
val p1 = new Person()
val s1 = new Student()
//访问成员变量
println(s1.name)
//修改成员变量
s1.name = "小花花"
println(s1.name)
}
}
在scala的类中,使用def定义成员方法
返回值的类型可以不写,由Scala自动进行类型推断Class 类名(参数列表),参数列表中的变量可以用var|val,也可以不用。
用val或var定义,在类外可以访问,var可变变量,val不可变变量
不用val|var定义,在类外不可以访问 内部只读,不可改写
object Base35 {
//把功能都封装在class中
//1.属性
//2.方法
//3.辅助构造器
class Student() {
//1.类的属性 - 变量
var name: String = "小花"
var age: Int = 18
//2.类的方法 - 函数
def say(): Unit = {
println(s"${name},${age}")
}
}
def main(args: Array[String]): Unit = {
//实例化对象
val s1 = new Student()
s1.say()
val s2 = new Student()
s2.say()
}
}
object Base36 {
//带参数的构造器(构造函数)
//把功能都封装在class中
//1.属性
//2.方法
//3.辅助构造器
class Student(var name: String = "小花",var age: Int = 18) {
//1.类的属性 - 变量
//var name: String = "小花"
//var age: Int = 18
//2.类的方法 - 函数
def say(): Unit = {
println(s"${name},${age}")
}
}
def main(args: Array[String]): Unit = {
//实例化对象
val s1 = new Student()
s1.say()
val s2 = new Student("小明",19)
s2.say()
}
}
object Base37 {
class Triangle(var a:Double = 1.0,var b:Double = 1.0,var c:Double = 1.0) {
println(s"${a} ${b} ${c}")
//检查是否构成三角形,结果是boolean
def check():Boolean = {
return a+b > c && b+c>a && a+c>b
}
//计算面积:根据三角形的三边计算面积
def getArea():Double = {
if(check()){
var s = (a+b+c)/2
s = Math.sqrt(s*(s-a)*(s-b)*(s-c))
return s
}else{
println(s"${a} ${b} ${c}不能构成一个三角形")
return -1
}
}
}
def main(args: Array[String]): Unit = {
//print("请输入第一条边")
//val a = scala.io.StdIn.readDouble()
//print("请输入第二条边")
//val b = scala.io.StdIn.readDouble()
//print("请输入第三条边")
//val c = scala.io.StdIn.readDouble()
//val t1 = new Triangle(a, b, c)
val t1 = new Triangle(3,4,7)
println(t1.getArea())
val t2= new Triangle(3,4,3)
println(t2.getArea())
//if(t1.check()){
// println("能构成三角形")
//}else{
//println("不能构成三角形")
//}
}
}
object Base38 {
//构造器的默认值
//必填项:姓名,年龄
//有默认值的项
//性别:男
//民族:汉
//
class Student(var name:String, var age:Int, var gender:String="男",var nav:String="汉族") {
def say(): Unit = {
println(s"${name},${age},${gender},${nav}")
}
}
def main(args: Array[String]): Unit = {
var s1 = new Student("小明",19)
s1.say()
var s2= new Student("小花",18,"女","回族")
s2.say()
}
object Base39 {
//构造器中的参数的类型
//1.val定义的属性不能修改
//2.var定义的属性可以修改
//3.没有val,也没有var的,不是对象的属性,不能使用,语法来访问
class Student(var name:String, var age:Int, var gender:String="男",var nav:String="汉族") {
def say(): Unit = {
println(s"${name},${age},${gender},${nav}")
}
}
def main(args: Array[String]): Unit = {
var s1 = new Student("小明",19)
s1.age = 20
s1.say()
}
}
辅助构造函数
构造函数可以有很多个
- 辅助构造器可以通过 this 关键字调用主构造器,从而确保所有初始化逻辑都集中在主构造器中。
object Base40 {
// 主构造器的方式---辅助构造器
// 1. 主构造器的参数
// 2. 辅助 + 密码 + 用户名
// 组合
class Register(var name: String, var email: String, var pwd: String, var phone: String) {
println("主构造器被调用")
// 辅助构造器
// 1. 名称一定是this
// 2. 在辅助构造器内部,一定要调用主构造器this
// 3. 可以有多个
def this(phone: String, pwd: String) {
this("用户xxxx", "xxxx@qq.com", pwd, phone) // 调用主构造器
println("辅助构造器被调用")
}
def this(email: String, pwd: String, name: String) {
this(name, email, pwd, "13600000000") // 调用主构造器
println("辅助构造器被调用")
}
def say(): Unit = {
println(s"姓名: ${name}, 邮箱: ${email}, 密码: ${pwd}, 手机号: ${phone}")
}
}
def main(args: Array[String]): Unit = {
val r1 = new Register("小明", "123123@qq.com", "123456", "13517855567")
// 调用辅助构造器
val r2 = new Register("13517855566", "123456")
val r3 = new Register("74565655@qq.com", "123456", "小明")
r1.say()
r2.say()
r3.say()
}
}