第1关:继承

简介: 第1关:继承

任务描述

   本关主题是利用 Scala 面向对象编程中类的继承,对手机品牌进行面向对象建模与编程。请仔细阅读下面“相关知识”中的内容,理解每个手机类所需完成的操作,补全huawei类中的函数,使得程序运行结果如预期输出。


相关知识


   Scala语言通过extends关键字来实现类间的继承。Scala 不允许类从多个父类继承。

Scala 中的继承需满足:


(1)重写一个非抽象方法必须使用override修饰符;

(2)只有主构造函数可以调用父类的主构造函数;

(3)在子类中重写父类的抽象方法时,不需要使用override关键字;

(4)可以重写父类中的成员变量。


    首先创建一个手机抽象类,让这个抽象类被其他类继承。


abst\fract class Phone{   //是抽象类,不能直接被示例化  
      val phoneBrand: String  //成员变量没有初始化值,就是一个抽象成员变量  
      def info()  //抽象方法,不需要使用abst\fract关键字  
      def greeting() {  //具体方法  
          println("Welcome to use phone!")   
      }  
}  


    当子类继承抽象类时,需要在子类中对父类中的抽象成员变量进行初始化,否则子类也必须声明为抽象类。


/*父类中包含抽象成员变量时,子类如果为普通类则必须将该成员变量初始化,否则子类也应声明为抽象类*/  
scala> class XiaoMi extends Phone  
<console>:12: error: class XiaoMi needs to be abst\fract, since:  
it has 2 unimplemented members.  
/** As seen from class XiaoMi, the missing signatures are as follows.  
 *  For convenience, these are usable as stub implementations.  
 */  
  def info(): Unit = ???  
  val phoneBrand: String = ???
       class XiaoMi extends Phone  
             ^
//在子类中对父类中的抽象成员变量及抽象方法进行初始化,使用override关键字  
scala> class Apple extends Phone{  
          override val phoneBrand:String="Apple"  
          override def info:Unit=println("Welcome to use iphone!")  
      }  
defined class Apple
//也可以省略override关键字  
scala> class Apple extends Phone{  
       val phoneBrand:String="Apple"  
       def info:Unit=println("Welcome to use iphone!");  
     }  
defined class Apple 


如果Phone类中存在抽象成员变量phoneBrand,子类Apple如果没有对该成员变量进行初始化的话,系统会报错并提示应该将该类也定义为抽象类,如果不需要子类为抽象类,则需要对该成员变量进行初始化,值得注意的是子类对父类抽象成员变量进行重写可以加override关键字,也可以省略。


   抽象类不能直接被实例化,可以定义扩展类,其将扩展 Phone 类,或者说继承自 Phone 类。


class Apple extends Phone{
     //重写父类成员变量,可以使用override关键字。  
      override val phoneBrand = "Apple"     
    //重写父类的抽象方法时,不需要使用override关键字,不过,如果加上override编译也不报错  
    def info() {  
       printf("This is a/an %s phone. It is expensive", phoneBrand)  
    }   
   //重写父类的非抽象方法,必须使用override关键字  
   override def greeting() {  
       println("Welcome to use Apple Phone!")  
   }  
}  


编程要求


    本关的编程任务是补全huawei类中从 Phone 类继承的函数,以使得程序运行结果如预期输出。根据提示,在右侧编辑器补充代码。


测试说明


下面是对平台如何评测你所实现功能的说明及样例测试。


测试输入:无输入


预期结果:


Welcome to use Apple Phone!
This is a/an Apple phone. It is expensive.
Welcome to use HuaWei Phone!
This is a/an HuaWei phone. It is useful.


开始你的任务吧,祝你成功!


abstract class Phone{
  val phoneBrand: String
  def info()
  def greeting() {
    println("Welcome to use phone!")
  }
}
class Apple extends Phone{
  override val phoneBrand = "Apple"
  def info() {
    printf("This is a/an %s phone. It is expensive.\n", phoneBrand)
  }
  override def greeting() {
    println("Welcome to use Apple Phone!")
  }
}
class HuaWei extends Phone {
  override val phoneBrand = "HuaWei"
   def info() {
    printf("This is a/an %s phone. It is useful.\n", phoneBrand)
  }
  //**************Begin*************************
    override def greeting() {
        println("Welcome to use HuaWei Phone!")
    }
  //**************End**************************
}
object MyPhone {
  def main(args: Array[String]){
    val myPhone1 = new Apple()
    val myPhone2 = new HuaWei ()
    myPhone1.greeting()
    myPhone1.info()
    myPhone2.greeting()
    myPhone2.info()
  }
}
目录
相关文章
|
7月前
|
编译器 C++
【C++】—— c++11新的类功能
【C++】—— c++11新的类功能
|
7月前
|
设计模式 Java
选择合适的接口类型
选择合适的接口类型
53 1
|
7月前
|
设计模式 算法 C语言
【C/C++ 程序设计】 C++如何适配他人的接口(How to Adapt to Others‘ Interfaces in C++)
【C/C++ 程序设计】 C++如何适配他人的接口(How to Adapt to Others‘ Interfaces in C++)
153 1
|
设计模式 安全 Java
设计规则之里氏替换原则
设计规则之里氏替换原则
74 0
设计规则之里氏替换原则
抽象类和接口(Abstract and Interface)精湛细节
抽象类和接口(Abstract and Interface)精湛细节
|
安全 Java 程序员
java面向对象的三大特性之封装和继承(配视频讲解)
🍅程序员小王的博客:程序员小王的博客 🍅程序员小王的资源博客:http://wanghj.online/ 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线 ———————————————— 版权声明:本文为CSDN博主「程序员小王java」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_44385486/article/details/128171102
162 0
java面向对象的三大特性之封装和继承(配视频讲解)
普通类,抽象类和接口之间的区别
普通类,抽象类和接口之间的区别
系统认知Java接口、接口与继承、接口与多态
在面向对象的基础之上,接口的出现是类性质的一种完善,是继承机制的一种补充,是体现多态性的一种形式。从生活实际出发,接口把它之下一系列复杂的逻辑,功能等通过“实现接口”的方式封装简化出来,只通过连接一个小小的口子就轻而易举地实现了背后实则很复杂的功能。我想这就是接口存在的意义所在吧。
215 0
系统认知Java接口、接口与继承、接口与多态
|
Java Scala
第2关:多态
第2关:多态
134 0