一、面向对象的相关概念
1. 面向对象的三大特征是
(1) 封装
(2) 继承
(3) 多态
2. 什么是类class? 类是属性和行为的集合。
(1) 属性也叫成员变量:名词,用来描述事物的外在特征
(2) 行为也叫成员方法:动词,表示事物能做什么
二、创建类和对象
在Scala中,用class来创建类,用new来创建对象。
// 1.定义一个类
// 2.类名:首字母大写
// class 类名(){}
class Student(){// 属性
// 定义属性和定义变量一致
var name:String="小花"
var age:Int=18
// 方法
// 定义方法和定义函数一致
def sayHello(): Unit = {
println(s"我是${age} 岁的 ${name}")
}
}
def main(args: Array[String]): Unit = {
// 2.创建对象(实例化对象)
// 对象名=new 类名()
val st1=new Student()
println(st1.name)
// 通过 对象.属性名 来访问属性
st1.sayHello()
val st2=new Student()
println(st2.age)
三、定义和访问成员变量
1. var/val 来定义成员变量
2. 对象可以通过对象名. 成员变量的方式来访问成员变量
// 带参数的构造器(构造函数)
class Student(var name:String="小花",var age:Int=18){
// 方法
// 定义方法和定义函数一致
def sayHello(): Unit = {
println(s"我是${age} 岁的 ${name}")
}
}
def main(args: Array[String]): Unit = {
// new Student()
// 1.调用构造器,第5行
// 2.没有传入相关的参数,使用默认值。
val st1=new Student()
println(st1.name)
// new Student("小明",19)
// 1.调用构造器,第5行
// 2.传入相关参数。
val st2=new Student("小明",19)
println(st2.name)
}
四、案例三角形类
1. 求三角形的面积
2. 判断是否是一个三角形.
class Triangle(a: Double, b: Double, c: Double) {
// 计算面积
def getArea(): Double = {
if (check()){
// 能否根据三条边长,来计算面积? 海伦公式
var s = (a + b + c) / 2
s = s * (s - a) * (s - b) * (s - c)
return Math.sqrt(s) // Math.sqrt(4) ==> 2 就是开平方操作
}else{
print("不能构成三角形")
return 0;
}
}
// 检查是否能构成三角形
def check():Boolean={
// 任意两边之和大于第三边
return (a+b)>c && (a+c)>b && (b+c)>a
}
}
def main(args: Array[String]): Unit = {
// Triangle表示一个三角形类。
// Triangle(边长1,边长2,边长3)
val t1=new Triangle(3,4,5)
println(t1.getArea()) // 获取面积
val t2=new Triangle(4,4,4)
println(t2.getArea()) // 获取面积
val t3=new Triangle(1,2,4)
println(t3.getArea())
}
五、定义和访问成员方法
类可以有自己的行为,scala中也可以通过定义成员方法来定义类的行为。
// 可以在两个地方写属性
// 1.构造器的参数列表
// 2.构造器内部
// 构造器的参数列表:
// 1.val 表示不可以被修改的属性
// 2.var 表示可以被修改的属性
// 3.没有修饰符,不是对象的属性,无法访问
class Triangle(val a:Double,var b:Double,c:Double) {
val d:Int=1
val e:Int=2
}
def main(args: Array[String]): Unit = {
val t=new Triangle(1,2,3)
t.b=2
//t.c无法访问
}
六、写多个构造器
object basic29 {
// 主构造器
class User(val phone: String, var pwd: String) {
var email:String=""
var name:String=""
//辅构造器
def this(email:String,name:String,pwd:String){
// 调用一次主构造器
this("",pwd)
// 再对其他的属性赋值
this.name=name
this.email=email
}
// 辅构造器
def this(email:String,name:String,pwd:String,phone:String){
// 调用一次主构造器
this(phone,pwd)
// 再对其他的属性赋值
this.name=name
this.email=email
}
def say():Unit={
println(s"我的信息如下:")
println(s"姓名:${name}")
println(s"手机号:${phone}:")
println(s"邮箱:${email}")
println(s"密码:${pwd}")
}
}
def main(args: Array[String]): Unit = {
var u1=new User("13617891234","123456")
u1.say()
var u2=new User("12345@qq.com","小花","123456")
u2.say()
var u3=new User("12345@qq.com","小花","123456","1362873082")
u3.say()
}
}