带参数的构造器(构造函数)
//带参数的构造器(构造函数)
class Student(var name: String = "小花", var age: Int = 18) {
//方法
//定义方法和定义函数一致
def sayHello() = {
println(s"我是${age} 岁的 ${name}")
}
}
def main(args: Array[String]): Unit = {
//new Student()
//1.调用构造器,第五行
//2.没有传入相关的参数,使用默认值
val st1 = new Student()
println(st1.name)
//new Student("小明",19)
//1.调用构造器,第五行
//2.传入相关的参数
val st2 = new Student("小明", 19)
println(st2.name)
函数的调用
计算三角形边长的面积,且进行调用
//面向对象编程的三个特点
//封装,继承,多态
class Triangle(a:Double,b:Double,c:Double) {
//计算面积
def getAera():Double={
//能否根据三条边长,来计算面积?
var s =(a+b+c)/2
s = s*(s-a)*(s-b)*(s-c)
return Math.sqrt(s)
}
}
def main(args: Array[String]): Unit = {
//Triangle表示一个三角形类。
//Triang(边长1,边长2,边长3)
val t1 = new Triangle(3,4,5)
println(t1.getAera())//获取面积,输出结果为6.0
val t2 = new Triangle(4,4,4)//调用
println(t2.getAera())//获取面积,输出结果为6.928203230275509
}
注:若用户给出的数字不足以构成三边 eg:
val t3 = new Triangle(1,1,0)//调用
println(t3.getAera())//获取面积
新增t3,将边长改为1,1,0输出结果为0.0
解决方法:
在函数里新增if,若输出的数不足以构成三角形输出“不能构成三角形“完整函数如下
//面向对象编程的三个特点
//封装,继承,多态
class Triangle(a:Double,b:Double,c:Double) {
//计算面积
def getAera():Double={
if(check()){
//能否根据三条边长,来计算面积?
var s =(a+b+c)/2
s = s*(s-a)*(s-b)*(s-c)
return Math.sqrt(s) //Math.sqrt(4) ==> 就是开平方操作
}else{
print("不能构成三角形")
return 0;
}
}
//坚持是否能构成三角形
def check():Boolean = {
//任意两边之和大于第三边
return (a+b)>c && (a+b)>b && (b+c) >a
}
}
def main(args: Array[String]): Unit = {
//Triangle表示一个三角形类。
//Triang(边长1,边长2,边长3)
val t1 = new Triangle(3,4,5)
println(t1.getAera())//获取面积
val t2 = new Triangle(4,4,4)//调用
println(t2.getAera())//获取面积
val t3 = new Triangle(1,1,0)//调用
println(t3.getAera())//获取面积
}
}
构造器
可以在两个地方写属性:
1.构造器的参数列表
2.构造器的内部
构造器的参数列表:
1.val 表示不可以被修改的属性
2.var 表示可以被修改的属性
3.没有修饰符,不是对象的属性,无法访问
eg:
/***
*构造器的参数修饰符
*/
object basic30 {
//可以在两个地方写属性
//1.构造器的参数列表
//2.构造器的内部
//构造器的参数列表:
//1.val 表示不可以被修改的属性
//2.var 表示可以被修改的属性
//3.没有修饰符,不是对象的属性,无法访问
class Triangle(var a:Double,var b:Double, c:Double) {
val d:Int = 1
var e:Int = 2
}
def main(args: Array[String]): Unit = {
val t = new Triangle(1,2,3)
t.b = 2
//t.c 无法访问
}
}
eg:
写一个构造器
主构造器:一个,就是class
辅构造器:多个,名称就是this
构造器的作用:产生对象
支持多种创建对象的方式 ==== 在网站在注册用户的时候,可以有多种注册的方式:手机号,微信号,邮箱号
/** *
* 写一个构造器
* 主构造器:一个,就是class
* 辅构造器:多个,名称就是this
*
* 构造器的作用:产生对象
* 支持多种创建对象的方式 ==== 在网站在注册用户的时候,可以有多种注册的方式:手机号,微信号,邮箱号
*/
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 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("12345678901", "123456")
u1.say()
var u2 = new User("12345@qq.com", "小花", "123456")
u2.say()
var u3 = new User("12345@qq.com","小花","123456","12345678901")
u3.say()
}
}