1 伴生类和伴生对象
package com._51doit.day04.demo.oob
/**
* FileName: Demo1
* Author: 多易教育-DOIT
* Date: 2020/11/3 0003
* Description: 类
* 这是一个类 需要new 实例化 实例化以后才能调用类中的属性和方法
*/
class Demo1 {
private val id = 123
}
package com._51doit.day04.demo.oob
/**
* FileName: Demo2
* Author: 多易教育-DOIT
* Date: 2020/11/3 0003
* Description: object修饰的
* object文件中的内容是静态的 不需要new来实例
* 可以直接访问 object中的属性和方法
*/
object Demo2 {
private val id = "abc"
}
package com._51doit.day04.demo.oob
/**
* FileName: Test1
* Author: 多易教育-DOIT
* Date: 2020/11/3 0003
* Description:
*/
object Test1 {
def main(args: Array[String]): Unit = {
val demo = new Demo1
// 在Test1中试图访问Demo1类中私有的属性被拒接
// println(demo.id)
//在Test1中试图访问object Demo2类私有的属性被拒接
// println(Demo2.id)
}
}
伴生类和伴生对象
package com._51doit.day04.demo.oob
/**
* FileName: Demo3
* Author: 多易教育-DOIT
* Date: 2020/11/3 0003
* Description:
* class 名字
* object 名字
* 如果名字先相同在同一个文件中
* 那么 : class的Demo3是object的Demo3的伴生类
* object的Demo3是class的Demo3伴生对象
* 一般情况 伴生类和伴生对象同时出现
* 可以互相访问彼此的私有内容
*/
class Demo3 {
private val age = "AAA"
Demo3.name
}
object Demo3{
private val name = "AAA"
new Demo3().age
}
2 类的组成结构
package com._51doit.day04.demo.oob
/**
* FileName: Demo4
* Author: 多易教育-DOIT
* Date: 2020/11/3 0003
* Description: 类结构
*/
class Demo4 {
// 成员变量
val name = "zss"
// 成员方法
def add(x:Int,y:Int):Int={
// 局部变量
val z = 123
x+y
}
// 成员函数
val f = (x:String)=>{
// 局部变量
val y = 123
x.toUpperCase
}
// 成员内部对象
object A{
}
// 成员内部类
class B{
}
// 成员代码块
{
}
}
object Demo4{
// 成员变量
val name = "zss"
// 成员方法
def add(x:Int,y:Int):Int={
x+y
}
// 成员函数
val f = (x:String)=>{
x.toUpperCase
}
// 成员内部对象
object A{
}
// 成员内部类
class B{
}
// 成员代码块
{
}
}
3 构造器
package com._51doit.day04.demo.oob.construction
/**
* FileName: Demo1
* Author: 多易教育-DOIT
* Date: 2020/11/3 0003
* Description:
* 类有一个默认的空参主构造器
* 声明的时候 () 可以省略
* 调用的时候()可以省略
* 1 类有主构造器
* 2 类的构造器的定义方式 def this(参数列表){
* 先调用其他构造器
* }
*/
class Demo1 {
def this(str:String){
this()
}
def this(str:String ,a:Int){
this("str")
}
}
object Demo1{
def main(args: Array[String]): Unit = {
val demo1 = new Demo1
val demo2 = new Demo1("abc")
val demo3 = new Demo1("", 12)
}
}
package com._51doit.day04.demo.oob.construction
/**
* FileName: Demo2
* Author: 多易教育-DOIT
* Date: 2020/11/3 0003
* Description:
* 类有一个默认的空参主构造器
* 声明的时候 () 可以省略
* 调用的时候()可以省略
* 1 类有主构造器
* 2 类的构造器的定义方式 def this(参数列表){
* 先调用其他构造器
* }
* 3 定义一个类 定义柱构造器有三个参数
* 3.1 可以使用val var 修饰参数
* 3.2 可以不使用 不使用val var修饰的参数是局部变量
* 4 建议写一个柱构造器 定义该有属性 默认是有get方法的
* 5 再给类定义一个空参的辅助构造器 调用主构造器为属性赋默认值
* 6 使用val修饰的属性是成员属性 但是只能get和初次赋值
* 使用var修饰的属性是成员属性 有get方法 也可以再赋值
*/
class Demo2(val name:String,var age:Int ,val id:Int) {
/* def this(str:String){
this(str,1,1)
}*/
def this(){
this("",-1,-1)
}
override def toString = s"Demo2($name, $age, $id)"
}
package com._51doit.day04.demo.oob.construction
/**
* FileName: Teacher
* Author: 多易教育-DOIT
* Date: 2020/11/3 0003
* Description:
*/
class Teacher(val id: Int, var name: String, var job: String, var sal: Double) {
// 初始值
def this() {
this(-1, "", "", -1d)
}
override def toString = s"Teacher($id, $name, $job, $sal)"
}
package com._51doit.day04.demo.oob.construction
/**
* FileName: Coder
* Author: 多易教育-DOIT
* Date: 2020/11/3 0003
* Description:
* 在创建对象的时候给属性赋值
* java 类 属性 赋值
* 在构造器中定义成员属性
* 调用构造器传入实参 get
*/
class Coder {
var name:String = "zss"
var age:Int = _
def this(str:String , age:Int){
this()
this.name = str
}
}