Java SE 三大特性
封装:属性 方法 封装到一个类中
继承: 父类和子类之间 属性和方法也是可以重写的
多态:父类引用指向子类对象
这三种特性,scala也有
类和对象
女朋友: 名字 年龄 cup 爱好
金莲 30 B 喂药
铁柱 19 C 玩游戏
女朋友就是一个类,该类中有一些属性、还有一些方法
类是一个抽象的、概念层面的东西
对象就是具体的,其实对象就是一个类的实例化的操作
对象 duixiang = new 类()
类是对象的模板,对象是类的具体实例
一个类你是可以实例化多个
占位符
在一个scala文件中是可以定义多个Class的
Object Classapp{
def main(args:Array[String]):Unit = {
//val | var 对象名:[类型] = new 类()
val user = new User() //构造器
user.name_$eq("小明") //setter
user.setname("小红")
}
}
class User{
//定义属性
@BeanProperty var name:String = ""//或者_
val age:Int = 30
//定义方法
def eat():Unit ={
println(S"$name...eating....")
}
}
Object ConstructorAPP{
def main(args:Array[String]):Unit = {
//通过构造器去实例化对象
val person = new Person(name = "ssn",age = 32)
println(s"name is ${person.name},age is ${person.age},school is ${person.school}")
}
}
/**
*定义构造器
*定义在类上的构造器叫主构造器
*/
class Person(val name:String,val age:Int){
println("Person Constructor enter")
val school = "nudt"
var gender:String = _
println("Person Constructor leave")
}
运行截图
1
Object ConstructorAPP{
def main(args:Array[String]):Unit = {
//通过构造器去实例化对象
val person = new Person(name = "ssn",age = 32,gender = "男")
println(s"name is ${person.name},age is ${person.age},school is ${person.school},gender is ${person.gender}")
}
}
/**
*定义构造器
*定义在类上的构造器叫主构造器
*/
class Person(val name:String,val age:Int){
println("Person Constructor enter")
val school = "nudt"
var gender:String = _
/**
*def this 修饰的叫做附属构造器
*附属构造器可以有多个 ,是通过入参的个数、类型决定的
*
*/
def this(name :String,age:Int,gender:String){
//第一行必须要调用主构造器或者其他附属构造器
this(name,age)
this.gender = gender
}
println("Person Constructor leave")
}
运行如图:
构造器的作用就是实例化对象
抽象类:
/**
*抽象类的定义和使用
*抽象类:类中的一个或者多个方法、属性没有完整的定义
*抽象类是不能直接被实例化的
*
*abstract class 类名 //定义类名
*val|var name:String//定义属性,只有定义,没有具体的赋值
*def xxx() //定义方法,没有
*/
Object AbstractClassApp{
def main(args:Array[String]):Unit = {
val student = new Student2
student.speak
}
}
/**
*抽象类必须要有具体的实现类才能被实例化
*/
class Student2 extend2 Person2{
override def speak:Unit ={
println("speak....")
}
override val name:String = "ssn"
override val age:Int =30
}
abstract class Person2{
def speak
val name:String
val age:Int
}
运行如图:
另一种抽象类被实例化的方法
/**
*抽象类的定义和使用
*抽象类:类中的一个或者多个方法、属性没有完整的定义
*抽象类是不能直接被实例化的
*/
Object AbstractClassApp{
def main(args:Array[String]):Unit = {
val stu = new Person2{
override def speak:Unit ={
println("speak....")
}
override val name:String = "ssn"
override val age:Int =30
}
stu.speak
}
}
/**
*抽象类必须要有具体的实现类才能被实例化
*/
abstract class Person2{
def speak
val name:String
val age:Int
}
运行如图:
type 定义新的数据类型名称
Object TypeApp{
// type 定义新的数据类型名称
type S = String
val value:S = "ssn"
def test():S = "张三"
}
源码截图