一:理解抽象类:
类本身就是对对象的抽象,抽象类就是对类的抽象,就是一种更加模糊的类。
定义:抽象类是一个包含一个或多个的类。抽象方法是不带任何实现的方法。抽象类也可以包含具体的方法和属性。
目的:抽象类的主要目的是为子类提供公共的接口和部分实现,并确保子类实现抽象方法。
二:定义抽象类:
定义抽象属性:var|val 属性名:类型 一个属性没有初始化,没有值
定义抽象方法:def 方法名():String 只声明没有实现方法。
package txy
object Demo14 {
def main(args: Array[String]): Unit = {
abstract class sc() {
var sex:String
var age:Int
var iq:Int
}
class shenchong extends sc{
var sex:String ="男"
var age:Int = 19
var iq:Int = 30
}
//var sc1 = new sc -----报错
var sc1 = new shenchong
println(sc1.iq)
println(sc1.sex)
println(sc1.age)
}
}
三:继承抽象类:
子类继承了抽象类,它就必须去实现所有抽象属性和抽象方法
package txy
object Demo14 {
def main(args: Array[String]): Unit = {
abstract class sc() {
var sex:String
var age:Int
var iq:Int
def add():Unit
def get()= {
println(s"沈冲的iq为${iq}")
}
}
class shenchong extends sc{
var sex:String ="男"
var age:Int = 19
var iq:Int = 30
def add(): Unit = {
iq *= 2
println(s"沈冲经过后天学习后的iq为${iq}")
}
}
//var sc1 = new sc -----报错
var sc1 = new shenchong
println(sc1.iq)
println(sc1.sex)
println(sc1.age)
sc1.get()
sc1.add()
}
}
四:重写抽象类:
如果子类中对抽象类中的方法定义不满意,仍可以使用override去覆盖的。
package txy
object Demo14 {
def main(args: Array[String]): Unit = {
abstract class sc() {
var sex:String
var age:Int
var iq:Int
def add():Unit
def get()= {
print(s"沈冲年龄为${age}")
print(s"沈冲的iq为${iq}")
print(s"沈冲的性别为${sex}")
}
}
class shenchong extends sc{
var sex:String ="男"
var age:Int = 18
var iq:Int = 30
def add(): Unit = {
iq *= 2
age += 3
sex = "女"
print(s"沈冲经过后天学习后的iq为${iq}")
print(s"三年后沈冲的年龄为${age}")
println(s"沈冲现在的性别为${sex}")
}
override def get(): Unit = {
print(s"沈冲年纪轻轻${age}岁,")
print(s"他的的iq就低于常人,只有${iq}")
println(s"性别可能为${sex}")
}
}
//var sc1 = new sc -----报错
var sc1 = new shenchong
println(sc1.iq)
println(sc1.sex)
println(sc1.age)
sc1.get()
sc1.add()
}
}
五:内部类:
在类的内部再写一个类
package txy
//内部类:在类的内部,再写一个类
object Demo15 {
def main(args: Array[String]): Unit = {
class c1 {
def say(): Unit = {
println("c1----")
}
class c2 {
def say(): Unit = {
println("c2-----")
}
}
}
val c1 = new c1()
//创建一个c1的对象
val c2 = new c1.c2()
//创建一个c2 的对象
c2.say()
c1.say()
}
}