继承的定义:

在原有类的基础上定义一个类,原有类称为父类,新类称为子类class类名 extends父类名(类体)

class Aniaml(){
  var leg=4
  def run():Unit={
    println("animal run....")
  }
}
//继承:不劳而获
class Dog extends Aniaml(){
  
}
object Test17 {
  def main(args: Array[String]): Unit = {
    //实例化一个对象:new一个对象
    //var a1=new Animal()
    //a1.run()
    var d1=new Dog()
    d1.run()
  }

}

当子类从父类继承方法不能满足时,使用override

class Aniaml(){
  var leg=4
  def run():Unit={
    println("animal run....")
  }
}
//继承:不劳而获
class Dog extends Aniaml(){
  leg=3//对于var修饰的父类的属性,可以直接覆盖
  //用override重写(覆盖)父类的同名的方法
  override def run(): Unit = {
    println(s"${leg}Dog run.....")
  }
}
object Test17 {
  def main(args: Array[String]): Unit = {
    //实例化一个对象:new一个对象
    //var a1=new Animal()
    //a1.run()
    var d1=new Dog()
    d1.run()
  }

}

先执行父类构造器在子类

class Aniaml(var name:String,var age:Int){
  println(s"父类~构造器Animal正在运行.....${name} ${age}")
  var leg=4
  def run():Unit={
    println("animal run....")
  }
}
//继承:不劳而获
class Dog(name:String,age:Int) extends Aniaml(name,age){
  println(s"子类~构造器Dogz正在运行....${name} ${age}")
  leg=3//对于var修饰的父类的属性,可以直接覆盖
  //用override重写(覆盖)父类的同名的方法
  override def run(): Unit = {
    println(s"${leg}条腿的Dog run.....")
  }
}
object Test17 {
  def main(args: Array[String]): Unit = {
    //实例化一个对象:new一个对象
    //var a1=new Animal()
    //a1.run()
    var d1=new Dog(name = "小黑",1)
  //  d1.run()
  }

}

面向语言三个特点:封装,继承,多态(同一操作作用于不同的对象可以有不同的解释,产生不同的执行结果)

class Animal() {
  //属性
  var name = ""

  //方法
  def run(): Unit = {
    println("animal run...")
  }
}
class Dog extends Animal() {
  //重写同名的方法
  override def run(): Unit = {
  println("dog is running...")}

}

  class Cat extends Animal() {
    override def run(): Unit = {
      println("cat is running...")
    }

  }

object Test17 {
  def main(args: Array[String]): Unit = {
    val d1=new Dog()
    val c1=new Cat()
    run(d1)
    run(c1)
  }
  def run(obj:Animal):Unit={
    obj.run()
  }

}

设计一个Point类。其x和y可以通过构造器提供在设计一个子类Lable继承Point类其构造器接收一个标签值和x,y坐标

class Point(var x:Int,var y:Int){
  def print():Unit={
    println(s"x=${x},y=${y}")
  }

}
//x,y是从Point继承来的所以不需要var修饰符
//label是自己的属性需要写val修饰符
//Point(x,y):要去调用父类的构造器所以这里就不需要去补充数据的类型
class LabelPoint(x:Int,y:Int,var label:String) extends Point(x, y){
override def print():Unit={
  println(s"x=${x},y=${y},label=${label}")
}
}
object Test17_1 {
  def main(args: Array[String]): Unit = {
    val p1=new Point(1,2)
    p1.print()
    val labelP1=new LabelPoint(1,2,"小王")
    labelP1.print()
  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值