类和对象相关概念
-
什么是面向对象?
面向对象的三大特征:封装 继承 多态
-
什么是类class? 类是属性和行为的集合
(1) 属性也叫成员变量:名词,用来描述事物的外在特征
(2) 行为也叫成员方法:动词,表示事物能做什么
创建类和对象
object basic27 {
//1.定义一个类
//类名:首字母大写
//class 类名(){}
class Student() {
//属性
var name: String = "dd"
var age:Int = 20
//方法
//定义方法和定义函数一致
def sayHello() = {
println(s"我是${age}岁的${name}")
}
}
def main(args: Array[String]): Unit = {
//2.创建对象(实例化对象)
//对象名 = new 类名()
val st1 = new Student()
//通过 对象.属性名 来访问属性
println(st1.name)
//通过 对象.方法名() 来调用方法
st1.sayHello()
}
}
带参数的构造器(构造函数)
-
new class 会发生什么?
new 会调用一次构造器 代码
构造器 ==== class
构造器的作用: 生产对象
object basic28 {
class Student(var name:String = "dd", var age:Int = 20) {
//方法
//定义方法和定义函数一致
def sayHello() = {
println(s"我是${age}岁的${name}")
}
}
def main(args: Array[String]): Unit = {
// new Student()
// 1. 调用构造器,第4行
// 2. 没有传人相关的参数,使用默认值
val st1 = new Student()
//new class 会发生什么?
//new 会调用一次 构造器(或者叫构造函数) 代码
//构造器 ==== class
//构造器的作用: 生产对象
new Student()
println(st1.name)
// new Student("dd",20)
// 1. 调用构造器,第28行
// 2.传人相关的参数
val st2 = new Student("wym",19)
println(st2.name)
}
}
构造器的参数修饰符
-
val 表示不可以被修改的属性
-
var 表示可以被修改的属性
-
没有修饰符,表示对象的属性,无法访问
-
可以在两个地方写属性: (1)构造器的参数列表 (2)构造器内部
object basic30 {
class Triangle(val a:Double,var b:Double,c:Double) {
}
def main(args: Array[String]): Unit = {
val t = new Triangle(1,2,3)
t.b = 2
//t.c 无法访问
}
}
写多个构造器
案例1:定义一个注册类,它提供多种注册方式
object basic31 {
/*
* 支持多种创建对象的方式 ==== 在网站注册用户的时候,可以有多种注册方式:手机号,微信号,邮箱名
*/
// 主构造器
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","13578543")
u3.say()
}
}
练习题
案例1:封装一个三角形类
object basic29 {
class Triangle(a:Double,b:Double,c:Double) {
// 1.计算面积
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;
}
}
// 2.检查是否能构成三角形
def check():Boolean = {
//任意两边之和大于第三边
return (a+b)>c && (b+c)>c && (a+c)>b
}
}
def main(args: Array[String]): Unit = {
//Triangle 表示一个三角形类
//Triangle(边长a,边长b,边长c)
val t1 = new Triangle(3,4,5)
println(t1.getArea()) //获取面积
val t2 = new Triangle(1,2,3)
println(t2.getArea()) //获取面积
}
}