面向对象
它是一种编程思想,它是基于面向对象的,强调的是以对象为基础完成各种操作。
1. 面向对象的三大特征是
(1) 封装
(2) 继承
(3) 多态
类
类是属性和行为的集合。
1. 属性也叫成员变量:名词,用来描述事物的外在特征
2. 行为也叫成员方法:动词,表示事物能做什么
在Scala中,用class来创建类,用new来创建对象
//定义类
class Person(){}
class Student(){}
def main(args: Array[String]): Unit ={
//实例化对象
val p1 =new Person()
val s1 =new Student()
println(p1)
println(s1)
}
定义和访问成员
在本质上和java的set,get类似。 要注意:
1.val定义的变量可以生成 get。可以访问。
2.var定义的变量可以生成 get + set。可以访问 + 修改。
3.使用private修饰的变量,既不可以访问,也不可以修改。
class Person() {}
class Student() {
//var 可修改
//val 不可修改
var name:String="校花"
var age:Int=18
}
def main(args: Array[String]): Unit ={
//实例化对象
val p1 =new Person()
val s1 =new Student()
println(p1)
println(s1.name)
s1.name="小花"
println(s1.name)
}
构造函数
Class 类名(参数列表),参数列表中的变量可以用var|val,也可以不用。
用val或var定义,在类外可以访问
不用val|var定义,在类外不可以访问 内部只读,不可改写
class Student(var name:String="校花", var age:Int=18) {
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()
}
应用
class Triangle(var a:Double=1.0, var b:Double=1.0,var c:Double=1.0){
println(s"${a},${b},${c}")
def check():Boolean={
return a+b>c && b+c>a && a+c>b
}
}
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)
if(t1.check()){
println("能构成三角形")
}else{
println("不能构成三角形")
}
}
class Triangle(var a:Double=1.0, var b:Double=1.0,var c:Double=1.0){
println(s"${a},${b},${c}")
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 ={
val t1 = new Triangle(3,4,7)
println(t1.getArea())
val t2 = new Triangle(3,4,3)
println(t2.getArea())
}
辅助构造器的作用
1. 提供多种初始化方式:
辅助构造器允许您为类提供多种初始化选项,使得创建对象时更加灵活。例如,您可以定义一个不需要所有参数的构造器。
2.简化对象创建:
通过定义多个辅助构造器,您可以简化对象的创建过程,避免在主构造器中处理过多的参数。
3.调用主构造器:
辅助构造器可以通过 this 关键字调用主构造器,从而确保所有初始化逻辑都集中在主构造器中。
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()
}
构造器中的参数的类型
1.val定义的属性,不能修改 2.var定义的属性,可以修改 3.没有val,也没有var的 ,不是对象的属性。不能使用 。语法来访问
辅助构造器
// 多种注册用户的方式 --- 辅助构造器
// 1. 手机号 + 密码
// 2. 邮箱 + 密码 + 用户名
class Register(val name: String, var email: String, var pwd: String, var phone: String) {
println("主构造器调用")
// 辅助构造器1:手机号+密码
def this(phone: String, pwd: String) {
this("随机用户xxxxxx", "xxxxx@qq.com", pwd, phone)
println("辅助构造器调用")
}
// 辅助构造器2:邮箱+密码+用户名
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("13617885566", "123456") // 使用手机号注册
val r2 = new Register("19456651@qq.com", "123456", "小明") // 使用邮箱注册
r1.say()
r2.say()
}