0

0

Java和Scala如何实现面向对象编程

WBOY

WBOY

发布时间:2023-05-07 13:46:07

|

1119人浏览过

|

来源于亿速云

转载

Scala包:

基础语法:

package 包名.类名

Scala包的三大作用:

区分相同名字的类

当类很多时,可以很好的管理类

控制访问范围

包名的命名规范:

一般是小写字母+小圆点

立即学习Java免费学习笔记(深入)”;

com.公司名.项目名.业务模块名

写包的好处:

在maven中可以将自己写的包通过maven导入到项目中

在Scala中独有的包的写法  和文件夹不对应  可以独立存在

下图是我在类下边建的包,和正常的包一样使用 

Java Scala面向对象怎么使用

包是可以嵌套的

内层调用外层 不需要导包  atguigu包在techer下
外层调用内层 对象 需要导包

 如下代码:

package chapter04
object Test_01_package {
  def main(args: Array[String]): Unit = {
  }
}
//Scala独有的
package techer {
  import chapter04.techer.atguigu.Inner
  object test01t {
    def main(args: Array[String]): Unit = {
      println("hello  我是大哥 pack")
      //外层调用内层 对象 需要导包
          //Inner.main是下边那个包中的
      Inner.main(args)
    }
  }
  package atguigu {
    object Inner {
      def main(args: Array[String]): Unit = {
        println("Inner")
        //内层调用外层 不需要导包  atguigu包在techer下
        test01t.main(args)
      }
    }
  }
}

包对象:

在Scala中包也是面向对象的,只要在包的内部(只要在内部都可以,内层的嵌套也可以),都可以直接调用包对象的属性和方法

如果包有嵌套,会出现覆盖的情况,则会调用距离最近的包的属性与方法(包距离最近则会后调用,会覆盖先前调用的)

导包说明:

导包是不支持嵌套的(导包后只能用它下边的类和对象,不能再用它下边的包,如果想使用它下边包中的方法,就需要使用   .   但是当我们导包直接导入它下边的包  就可以直接调用,不需要用  .     来使用)

Scala 中的三个默认导入分别是
import java.lang._
import scala._
import scala.Predef._

类和对象:

类:可以看成一个模板
对象:表示具体的事物
我们在使用对象的时候,会以类为模板创建对象

定义类:

在Java中一个文件中只能有一个public    

在Scala中 默认的是public 但是它在一个文件中可以创建多个伴生类和伴生对象

封装:

在Scala中属性只有两种  可变(var)与不可变(val)(分离了读写权限----类似与面向对象中的封装(封装get  set  方法  是为了分离读写权限))

在Scala直接通过属性的类型来分离

在Scala中属性的类型已经封装成    var----private       val----private final         

并且get  set方法也已经封装(封装成了注解,在使用get  set方法的时候需要 先引入注解@BeanProperty----不过该注解的作用域只有一个属性  意思是  一个属性需要设置一个注解)

构造器:

面向对象的语言基本都有构造器(构造方法),如果在类中不写构造方法  默认构造器为空参构造方法

在Scala中也有构造器,与Java不同,

Scala的构造器是在类名上加个()   是主构造器(主构造器无参的时候可以省略()  表示默认是可以无参构造的  类同Java)

有主构造器就一定有从构造器

在主构造器的内部可以定义辅助构造器 定义的格式是固定的,在从构造器的内部第一行代码必须是直接或者间接的调用主构造器

class Person03(name:String){
  var name1:String=name
def this()
  {
    this("唐不唐")
    println("hello world")
  }
}
主从构造器的加载机制:

在Scala中没有类加载机制,所以在代码直接调用辅助构造器的时候它是不知道类中的内容的, 所以上边要求(从构造器的内部第一行代码必须是直接或者间接的调用主构造器),这就是原因所在,获取类信息(加载一遍),调用完后才会返回从构造器继续执行

根据main方法中你的参数决定你调用那个构造器

PHP Apache和MySQL 网页开发初步
PHP Apache和MySQL 网页开发初步

本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。

下载

从构造器是有先后顺序的,后边的只能调用前面的(所调用的构造器必须在本构造器之前)

从构造器的名称统一为this(根基参数的个数来区分)

主构造器是可以传参的 参数可以当作属性来使用(参数类型如果省略,默认val)

继承:

继承关键字:extends

基础语法:

class 子类名 extends 父类名 { 类体 }

子类继承父类的属性和方法

scala 是单继承

继承的本质:其实与Java是完全不一样的

在创建子类的对象时,Scala会先创建父类的对象让后在外层创建子类对象(同Java)

Scala继承的本质就是继承父类的一个构造器(继承那个构造器(参数个数来区别)就会调用那个)

抽象属性:

就是不写等号,写抽象方法需要把类改成抽象类

抽象属性在使用的时候需要继承它   让后需要重写属性和方法(在Java中是不需要重写属性的,因为Scala底层是对属性进行封装,自带方法)

在重写抽象类中的非抽象方法的时候需要在重写的方法前面加上    override   关键字

子类调用父类的方法的时候使用关键字super  

子类对抽象属性进行实现,父类抽象属性可以用 var 修饰;

子类对非抽象属性重写,父类非抽象属性只支持 val 类型,而不支持 var。
因为 var 修饰的为可变变量,子类继承之后就可以直接使用(可以直接进行修改),没有必要重写    

多态:

父类的引用指向子类的实例

Java中的多态测试

:在父子共有的属性和方法调用的是父类还是子类:

public class Polymorphic {
    public static void main(String[] args) {
        Person person=new Student();
        System.out.println(person.name);
        person.sayhi();
    }
    public static class Person{
     String   name="Person";
     public void sayhi()
     {
         System.out.println("person  sayhi");
     }
    }
public static class Student extends Person{
        String name="Student";
        public void sayhi()
        {
            System.out.println("student sayhi");
        }
}
 
}

属性是调用父类   方法是调用子类   

在进行多态的时候是先将整个内存先把父类写入里面,再把子类嵌套到外边

引用是使用栈 把地址值是先指向父类的   指向谁就调用谁的属性,但是调用方法是一层一层的调用,是不断的被重写的,所以方法是调用子类

Java Scala面向对象怎么使用

而Scala与Java不同 都是调用的子类的

Scala测试如下:
package chapter04
 
object Test07_Polymorphic {
  def main(args: Array[String]): Unit = {
       val  per:Person07=new Student07
       per.sayhi();
    println(per.name)
  }
}
class Person07()
{
  val name:String="dsdsd"
def sayhi():Unit={
  println("hi person")
}
}
class Student07 extends Person07{
  override val name: String = "Student"
override def sayhi(): Unit =
  {
    println("Student say hi")
  }
}

Java Scala面向对象怎么使用

匿名子类:

可以使用匿名子类直接调用抽象类

也可以直接new这个抽象子类

匿名子类是自动使用多态的

多态无法调用子类独有的属性和方法,外部无法使用匿名子类中特有的(它自己的)方法和属性

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

868

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

745

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

741

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

420

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

447

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

431

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16948

2023.08.03

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

31

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.9万人学习

C# 教程
C# 教程

共94课时 | 7.6万人学习

Java 教程
Java 教程

共578课时 | 51.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号