覆写字段注意事项和细节说明2|学习笔记

简介: 快速学习覆写字段注意事项和细节说明2。

开发者学堂课程【Scala 核心编程-基础覆写字段注意事项和细节说明2】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/8978


覆写字段注意事项和细节说明2

 

内容介绍

一、覆写字段的注意事项

二、语法书写示例

三、小结

 

本节继续来介绍 Scala 的细节

 

一、覆写字段的注意事项

var 只能重写另一个抽象的 var 属性,需注意不是重写另外一个 var,而是抽象的 var 属性。打开 scala,新建文件ScalaFieldOverrideDetail03:

package com. atguigu.chapter07. myextends

object ScalaFieldOverrideDetail03 {

def main(args:Array[String]):Unit={

}

}

//在 A03中,有一个抽象的字段(属性)

//1.抽象的字段(属性):就是没有初始化的字段(属性)

classA03{

var name:string    //抽象

}

string 此时属性没有赋值不能执行,因为在 class 里要求需要默认值,可用_来指令,也可以 Jack 字串来指令,所以没有初始化的字段就是抽象的,抽象的字段要求类也是抽象的(标记 abstract),如下:

package com. atguigu.chapter07. myextends

object ScalaFieldOverrideDetail03 {

def main(args:Array[String]):Unit={

}

}

//在 A03中,有一个抽象的字段(属性)

//1.抽象的字段(属性):就是没有初始化的字段(属性)

//2.当一类含有抽象属性时,则该类需要标记为 obstract

abstract classA03{

var name:string    //抽象

}

抽象的属性在底层不会生成对应的属性说明,而是生成两个对应的抽象方法,来运行之后看结果:

package com. atguigu.chapter07. myextends

object ScalaFieldOverrideDetail03 {

def main(args:Array[String]):Unit={

println(“hello~”)

}

}

//在A03中,有一个抽象的字段(属性)

//1.抽象的字段(属性):就是没有初始化的字段(属性)

//2.当一类含有抽象属性时,则该类需要标记为 obstract

//3.对于抽象的属性在底层不会生成对应的属性说明,而是生成两个对应的抽象方法(name、name_$eq)

abstract classA03{

var name:string    //抽象

}

运行后打开反编译工具,看到 A03没有 name 的属性,只有两个抽象方法,如下图:

image.png

这时就可重写,注意若不是一个抽象的属性就无法重写,如下:

package com. atguigu.chapter07. myextends

object ScalaFieldOverrideDetail03 {

def main(args:Array[String]):Unit={

println(“hello~”)

}

}

//在 A03中,有一个抽象的字段(属性)

//1.抽象的字段(属性):就是没有初始化的字段(属性)

//2.当一类含有抽象属性时,则该类需要标记为 obstract

//3.对于抽象的属性在底层不会生成对应的属性说明,而是生成两个对应的抽象方法(name、name_$eq)

abstract classA03{

var name:string    //抽象

}

class sub A03 extends A03 {

}

此时会在 sub A03初报错,将光标置于 A03后,按 alt+enter,会提示你两种解决方法(Add'abstract'modifier/Implement methods),但此时不用这两种方法,用覆写来解决:

package com. atguigu.chapter07. myextends

object ScalaFieldOverrideDetail03 {

def main(args:Array[String]):Unit={

println(“hello~”)

}

}

//在 A03中,有一个抽象的字段(属性)

//1.抽象的字段(属性):就是没有初始化的字段(属性)

//2.当一类含有抽象属性时,则该类需要标记为 obstract

//3.对于抽象的属性在底层不会生成对应的属性说明,而是生成两个对应的抽象方法(name、name_$eq)

abstract classA03{

var name:string    //抽象

}

class sub A03 extends A03 {

var name:string=“”

}

此时就可以覆写,如果在子类中重写父类的抽象属性,本质是实现了抽象方法,因此注意可以写 override,也可不写。

 

二、语法书写示例

接着来看:

package com. atguigu.chapter07. myextends

object ScalaFieldOverrideDetail03 {

def main(args:Array[String]):Unit={

println(“hello~”)

}

}

//在 A03中,有一个抽象的字段(属性)

//1.抽象的字段(属性):就是没有初始化的字段(属性)

//2.当一类含有抽象属性时,则该类需要标记为 obstract

//3.对于抽象的属性在底层不会生成对应的属性说明,而是生成两个对应的抽象方法(name、name_$eq)

abstract classA03{

var name:string    //抽象

var age:Int=10

}

class sub A03 extends A03 {

override var name:string=“”

override var age:Int=10

}

来看这时运行能否成功:

image.png

看到报错,发现变量不能去 override 可变的 variable,这是语法的规则,不用去细究其中原因,记住不要用就可以。

 

三、小结

1、抽象属性:声明未初始化的变量就是抽象的属相,抽象属性属在抽象类中。

2、一个属性没有初始化,那么这个属性就是抽象属性

3、抽象属性在编译成字节码文件时,属性并不会声明,但是会自动生成抽象方法,所以类必须声明为抽象类

4、如果是覆写一个父类的抽象属性,那么 override 关键字可省略[原因:父类的抽象属性,生成的是抽象方法,因此就不涉及到方法重写的概念,因此 override 可省略,写上也并不会报错,当然再严谨的语法也会有纰漏,大家不需要较真。

相关文章
|
机器学习/深度学习 人工智能 运维
构建高效自动化运维系统:DevOps与AI的融合
【5月更文挑战第19天】 在数字化转型的浪潮中,企业IT运维面临着日益复杂的挑战。传统的手动运维方式已经无法满足快速迭代和高可靠性的需求。本文探讨了如何通过结合DevOps理念和人工智能(AI)技术,构建一个高效的自动化运维系统。文章首先回顾了DevOps的核心原则及其在自动化运维中的应用,接着分析了AI如何增强故障预测、智能决策和自动化流程的能力。最后,提出了一个综合DevOps与AI技术的自动化运维框架,并讨论了其在实际部署中的优势和潜在挑战。
|
Web App开发 移动开发 开发者
mPaaS问题之提示License验证失败如何解决
mPaaS配置是指在mPaaS平台上对移动应用进行的各项设置,以支持应用的定制化和优化运行;本合集将提供mPaaS配置的操作指南和最佳实践,助力开发者高效管理和调整移动应用的设置。
482 1
|
存储 Java 测试技术
Java 21革命性升级:探索分代ZGC的性能奇迹
Java 21革命性升级:探索分代ZGC的性能奇迹
522 0
舵机应该如果选择?讲讲模拟舵机,数字舵机和总线舵机的区别
舵机应该如果选择?讲讲模拟舵机,数字舵机和总线舵机的区别
1989 0
|
SQL XML 程序员
数据库:SQLServer中with as 用法笔记
with as 也叫做子查询部分(subquery factoring),可以定义一个SQL段落,该SQL段落可以被整个SQL语句所用到类似于临时表的作用。with as 可以提高你的SQL语句的可读性,也有可以用在在UNION ALL的不同部分,作为提供临时数据的部分。
数据库:SQLServer中with as 用法笔记
|
Android开发
Android 三星手机拍照,从图库选择照片旋转问题完美解决
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/48995065 好久没有写博客了,最近解决了一个令我头疼好久的问题,就是三星手机拍照图片旋转的问题,项目中有上传图片的功能,那么涉及到拍照,从相册中选择图片,别的手机都ok没有问题,唯独三星的手机拍照之后,你会很清楚的看到会把照片旋转一下,然后你根据路径找到的图片就是已经被旋转的了,解决办法终于被我找到了。
2549 0
|
数据库
Entity Framework4.0 (一)概述(EF4 的Database First方法)
转自:http://www.cnblogs.com/marksun/archive/2011/12/15/2289582.html Entity Framework4.0(以后简称:EF4),是Microsoft的一款ORM(Object-Relation-Mapping)框架。
1364 0