Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 341|回复: 0

[默认分类] Scala坑六(抽象类)

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-8 13:11:17 | 显示全部楼层 |阅读模式

    1.抽象类(abstract class)
    类的一个或者多个方法没有完整的定义
    声明方法时只需要不写方法体,不需要关键字
    子类重写父类的抽象方法时不需要加override
    父类可以声明抽象字段(没有初始值的字段)
    子类重写父类抽象字段时不需要加override

    1. class Test3 {
    2. }
    3. abstract class Person{
    4.   def speak
    5.   val name : String
    6.   var age : Int
    7. }
    8. class Student extends Person{
    9.   def speak{
    10.     println("speak!!")
    11.   }
    12.   
    13.   var age = 100
    14.   val name = "ahaha"
    15. }
    16. object Test3 extends App{
    17.   var s = new Student;
    18.   s.speak
    19.   print (s.name + ":" + s.age)
    20. }
    复制代码



    2.trait 特质 对比下Java8的借口
    可以理解为包含具体实现的借口
        字段和行为的集合
    混入类中,第一个要用extends
    通过with关键字,一个类可以扩展多个特质
    带有特质的对象
    特质从左到右被构造

    1. trait Logger{
    2.   def log(msg:String)
    3. }
    4. trait ConsoleLogger extends Logger{
    5.         def log(msg : String){
    6.           println(msg)
    7.         }
    8. }
    9. class loggerImpl extends ConsoleLogger{
    10.         def test{
    11.           log("aaa")
    12.         }
    13. }
    复制代码




    1. trait ConsoleLogger{
    2.         def log(msg : String){
    3.           println("sava money" + msg)
    4.         }
    5. }
    6. trait MessageLogger extends ConsoleLogger{
    7.    override def log(msg : String){
    8.           println("sava money to bank" + msg)
    9.         }
    10. }
    11. abstract class Account{
    12.   def save
    13. }
    14. class MyAcconunt extends Account with ConsoleLogger{
    15.   def save{
    16.     log("100")
    17.   }
    18. }
    19. object Test3 extends App{
    20.   val a = new MyAcconunt with MessageLogger  //带有特质的对象
    21.   a.save
    22. }
    23. class loggerImpl extends ConsoleLogger{
    24.         def test{
    25.           log("aaa")
    26.         }
    27. }
    复制代码





    2.apply方法和单例对象

    1. class Test4 {
    2. }
    3. object Test4 extends App{
    4.   val a = ApplyText() //类名+括号调用的是object中的apply方法
    5.   a.test
    6.   val b = new ApplyTest//对象+括号调用的是类中的apply方法
    7.   println(b())
    8. }
    9. class ApplyTest{
    10.   def apply() = "APPLY"
    11.   def test{
    12.     println("test")
    13.   }
    14. }
    15. //object 里面的方法相当于静态方法
    16. object ApplyText{ //本身就是一个单例
    17.   def apply()= new ApplyTest
    18.   def static{
    19.     println("mmm a static method")
    20.   }
    21. }
    复制代码

    3.包

         可串联   package com.aaa{
    //在这个层次不能看的bbb的成员
    package.bbb{
    }
    }
    顶部标记  package com.b
       package b
    包对象  把公有的东西放在同一个包里面
    包可见性
    package aa.bb.cc.dd
    class XXX{
    private[dd] def as = {} //只能在dd包以下能使用
    }
    包在任何地方引入
    重命名成员 import  java.unil.(HashMap => JavaHashMap)
    隐藏包  (hashMap => _)
    自动引入 java.lang._









    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-8 00:14 , Processed in 0.384252 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表