Scala语言一些的一些注意事项汇总(1)
2017-11-08 08:22
309 查看
(1)外层包无法直接访问内层包
(2)scala允许在任何地方进行包的引入,_的意思是引入该包下的所有类和对象
(3)在scala中没有public关键字,仅有private 和 protected访问控制符,当一个类成员不加private和protected时,它的访问权限就是public.
(4)在java语言中,protected成员不但可以被该类及其子类访问,也可以被同一个包中的其它类使用,但在scala中,protected成员只能被该类及其子类访问
(5)无修饰符的成员同java 的public,可以在任何位置进行访问
(6)在scala中提供了更为灵活的访问控制方法,private、protected除了可以直接修饰成员外,还可以以private[X]、protected[X]的方式进行更为灵活的访问控制,这种访问控制的意思是可以将private、protected限定到X,X可以是包、类,还可以是单例对象.如:private[scala]限定Utils只能在scala及子包中使用。
(7)private[this],限定只有该类的对象才能访问,称这种成员为对象私有成员,伴生类对象也不能用。
(8)private,定义的类及伴生对象可以访问;
(9)
(10) 包对象主要用于将常量、工具函数,使用时直接通过包名引用;
(11) 外部类不能访问内部类的成员域,但内部类可以直接访问外部类成员域,哪怕这个成员域是private私有的.
(12) 内部类除了是一个类之外,与外部类的成员没有任何区别,它可以与外部类的成员域一样被使用.
(13)如果父类是抽象类,则不override关键字可以不加,这是因为如果继承的父类是抽象类(假设抽象类为AbstractClass,子类为SubClass),在SubClass类中,AbstractClass对应的抽象方法如果没有实现的话,那SubClass也必须定义为抽象类,否则的话必须要有方法的实现,这样的话,加不加override关键字都是可以的。
(14)匿名类
(15)多态的定义:多态”(Polymorphic)也叫“动态绑定”(Dynamic Binding)、“迟绑定”(Late Binding),指“在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用其相应的方法。”即指子类的引用可以赋给父类,程序在运行时根据实际类型调用对应的方法
(16)继承的缺点有以下几点:
1 父类的内部细节对子类是可见的。
2 子类从父类继承的方法在编译时就确定下来了,所以无法在运行期间改变从父类继承的方法的行为。
3 如果对父类的方法做了修改的话(比如增加了一个参数),则子类的方法必须做出相应的修改。所以说子类与父类是一种高耦合,违背了面向对象思想。
(17)组合的优点:
1 当前对象只能通过所包含的那个对象去调用其方法,所以所包含的对象的内部细节对当前对象时不可见的。
2 当前对象与包含的对象是一个低耦合关系,如果修改包含对象的类中代码不需要修改当前对象类的代码。
3 当前对象可以在运行时动态的绑定所包含的对象。可以通过set方法给所包含对象赋值。
(18)组合的缺点:
1 容易产生过多的对象。
2 为了能组合多个对象,必须仔细对接口进行定义。
(19)组合比继承更具灵活性和稳定性,所以在设计的时候优先使用组合。只有当下列条件满足时才考虑使用继承:
1 子类是一种特殊的类型,而不只是父类的一个角色
2 子类的实例不需要变成另一个类的对象
3 子类扩展,而不是覆盖或者使父类的功能失效
(20)处于继承层次最顶层的是Any类,它是scala继承的根类,scala中所有的类都是它的子类
(21)根类Any有两个子类,它们分别是AnyVal和AnyRef,其中AnyVal是所有scala内置的值类型( Byte, Short, Char, Int, Long, Float, Double, Boolean, Unit.)的父类,其中 Byte, Short, Char, Int, Long, Float, Double, Boolean与java中的byte,short,char,int,long,float,double,boolean原生类型对应,而Unit对应java中的void类型,由于( Byte, Short, Char, Int, Long, Float, Double, Boolean, Unit)继承AnyVal,而AnyVal又继承Any,因此它们也可以调用toString等方法。
(22)()可以作为Unit类型的实例,它同样可以调用toString等方法
(23)scala中的==操作它不区分你是原生类型还是引用类型
equals方法是检查值是否相等,而eq方法检查的是引用是否相等。所以如果比较的对象是null那么==调用的是eq,不是null的情况调用的是equals。
(24) Null类型是所有AnyRef类型的子类型,也即它处于AnyRef类的底层,对应java中的null引用。而Nothing是scala类中所有类的子类,它处于scala类的最底层。
(25)Nothing这个类一般用于指示程序返回非正常结果,利用Nothing作为返回值可以增加程序的灵活性。
(2)scala允许在任何地方进行包的引入,_的意思是引入该包下的所有类和对象
(3)在scala中没有public关键字,仅有private 和 protected访问控制符,当一个类成员不加private和protected时,它的访问权限就是public.
(4)在java语言中,protected成员不但可以被该类及其子类访问,也可以被同一个包中的其它类使用,但在scala中,protected成员只能被该类及其子类访问
(5)无修饰符的成员同java 的public,可以在任何位置进行访问
(6)在scala中提供了更为灵活的访问控制方法,private、protected除了可以直接修饰成员外,还可以以private[X]、protected[X]的方式进行更为灵活的访问控制,这种访问控制的意思是可以将private、protected限定到X,X可以是包、类,还可以是单例对象.如:private[scala]限定Utils只能在scala及子包中使用。
(7)private[this],限定只有该类的对象才能访问,称这种成员为对象私有成员,伴生类对象也不能用。
(8)private,定义的类及伴生对象可以访问;
(9)
(10) 包对象主要用于将常量、工具函数,使用时直接通过包名引用;
(11) 外部类不能访问内部类的成员域,但内部类可以直接访问外部类成员域,哪怕这个成员域是private私有的.
(12) 内部类除了是一个类之外,与外部类的成员没有任何区别,它可以与外部类的成员域一样被使用.
(13)如果父类是抽象类,则不override关键字可以不加,这是因为如果继承的父类是抽象类(假设抽象类为AbstractClass,子类为SubClass),在SubClass类中,AbstractClass对应的抽象方法如果没有实现的话,那SubClass也必须定义为抽象类,否则的话必须要有方法的实现,这样的话,加不加override关键字都是可以的。
(14)匿名类
abstract class Person(name:String,age:Int){ def walk():Unit } object demo{ def main(args: Array[String]): Unit = { //下面的代码定义了一个匿名类,并且进行了实例化 //直接new Person("john",18),后面跟的是类的内容 //我们知道,Person是一个抽象类,它是不能被实例化的 //这里能够直接new操作是因为我们扩展了Person类,只不 //过这个类是匿名的,只能使用一次而已 val s=new Person("john",18){ override def walk()={ println("Walk like a normal Person") } } s.walk() } }
(15)多态的定义:多态”(Polymorphic)也叫“动态绑定”(Dynamic Binding)、“迟绑定”(Late Binding),指“在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用其相应的方法。”即指子类的引用可以赋给父类,程序在运行时根据实际类型调用对应的方法
(16)继承的缺点有以下几点:
1 父类的内部细节对子类是可见的。
2 子类从父类继承的方法在编译时就确定下来了,所以无法在运行期间改变从父类继承的方法的行为。
3 如果对父类的方法做了修改的话(比如增加了一个参数),则子类的方法必须做出相应的修改。所以说子类与父类是一种高耦合,违背了面向对象思想。
(17)组合的优点:
1 当前对象只能通过所包含的那个对象去调用其方法,所以所包含的对象的内部细节对当前对象时不可见的。
2 当前对象与包含的对象是一个低耦合关系,如果修改包含对象的类中代码不需要修改当前对象类的代码。
3 当前对象可以在运行时动态的绑定所包含的对象。可以通过set方法给所包含对象赋值。
(18)组合的缺点:
1 容易产生过多的对象。
2 为了能组合多个对象,必须仔细对接口进行定义。
(19)组合比继承更具灵活性和稳定性,所以在设计的时候优先使用组合。只有当下列条件满足时才考虑使用继承:
1 子类是一种特殊的类型,而不只是父类的一个角色
2 子类的实例不需要变成另一个类的对象
3 子类扩展,而不是覆盖或者使父类的功能失效
(20)处于继承层次最顶层的是Any类,它是scala继承的根类,scala中所有的类都是它的子类
(21)根类Any有两个子类,它们分别是AnyVal和AnyRef,其中AnyVal是所有scala内置的值类型( Byte, Short, Char, Int, Long, Float, Double, Boolean, Unit.)的父类,其中 Byte, Short, Char, Int, Long, Float, Double, Boolean与java中的byte,short,char,int,long,float,double,boolean原生类型对应,而Unit对应java中的void类型,由于( Byte, Short, Char, Int, Long, Float, Double, Boolean, Unit)继承AnyVal,而AnyVal又继承Any,因此它们也可以调用toString等方法。
(22)()可以作为Unit类型的实例,它同样可以调用toString等方法
(23)scala中的==操作它不区分你是原生类型还是引用类型
equals方法是检查值是否相等,而eq方法检查的是引用是否相等。所以如果比较的对象是null那么==调用的是eq,不是null的情况调用的是equals。
(24) Null类型是所有AnyRef类型的子类型,也即它处于AnyRef类的底层,对应java中的null引用。而Nothing是scala类中所有类的子类,它处于scala类的最底层。
(25)Nothing这个类一般用于指示程序返回非正常结果,利用Nothing作为返回值可以增加程序的灵活性。
相关文章推荐
- Scala语言一些注意事项汇总(2)
- 您知道Linux下C语言编程的一些注意事项吗_教育中国
- Go语言程序设计的一些规则和注意事项
- AS3语言注意事项汇总
- Java语言的一些注意事项
- 使用.net框架应用C#语言开发窗口程序的一些注意事项
- 您知道Linux下C语言编程的一些注意事项吗_教育中国
- Java 调用 .net Webservice的一些问题和注意事项
- Java项目中的一些注意事项
- 跨进程使用startActivity来调用Activity的一些注意事项
- shell脚本的一些注意事项
- cocos2d-js:小技巧及注意事项汇总
- 关于UITableView需要注意的一些小事项!
- C语言使用注意事项(一)
- iOS开发中一些重要的系统方法使用注意事项总结
- 关于c++的一些注意事项
- 关于微信分享、登录的一些注意事项
- 缓存使用的一些注意事项
- 【语言工具】Python Matplotlib 一些概念及用法汇总
- 初学ui设计的一些注意事项