Scala调用Java静态成员及静态方法注意点——只能通过当前类名调用而不能借助子类调用父类静态成员/方法
2023-09-14 09:02:02 时间
只能通过当前类名NioUtil调用静态成员
package com.zxl.scala
import cn.hutool.core.io.{FileUtil, IoUtil, NioUtil}
import java.io.BufferedInputStream
import java.io.BufferedOutputStream
object HuToolsDemo {
def main(args: Array[String]): Unit = {
val in: BufferedInputStream = FileUtil.getInputStream("D:/Develop/kubectl/test.txt")
val out: BufferedOutputStream = FileUtil.getOutputStream("D:/Develop/kubectl/test2.txt")
//编译不通过,不能通过子类调用父类的静态成员 public class IoUtil extends NioUtil
//val copySize: Long = IoUtil.copy(in, out, IoUtil.DEFAULT_BUFFER_SIZE)
//只能调用当前类的静态成员,并且只能通过类名调用
val copySize: Long = IoUtil.copy(in, out, NioUtil.DEFAULT_BUFFER_SIZE)
}
}
进一步佐证
父类
package com.zxl.extend;
/**
* 父类
* */
public class JSON {
public static String parser(String str) {
return "static JSON.parser: " + str;
}
public String format(String str) {
return "JSON.format: " + str;
}
}
子类
package com.zxl.extend;
/**
* 子类
* */
public class JSONObject extends JSON {
public static String childParser(String str) {
return "static JSONObject.childParser: " + str;
}
public String childFormat(String str) {
return "JSONObject.childFormat: " + str;
}
// 不同点:java中调用静态方法可以使用对象或者类
public static void main(String[] args) {
JSONObject object = new JSONObject();
System.out.println(object.childFormat("sssss"));
System.out.println(object.childParser("sssss"));
System.out.println(JSONObject.childParser("sssss"));
}
}
scala调用java静态方法
package com.zxl.extend
/**
* 总结:
* 1. scala中调用java中静态方法只能使用当前类名,不能使用对象
* 2. java中静态方法尽管是public在scala中都无法使用子类调用
* 3. java中非静态子类继承父类的方法,在scala中可以使用子类对象调用
*/
object TestJavaCode {
def main(args: Array[String]): Unit = {
testJavaCode()
}
def testJavaCode(): Unit ={
val str: String = "some contents"
val json: JSON = new JSON()
val jo: JSONObject = new JSONObject()
// 尝试调用JSONObject中继承JSON的方法
println(jo.format(str))
//子类实例调用父类的static方法,编译都通不过
//println(jo.parser(str))
// 尝试调用JSON的方法
println(json.format(str))
//调用类的static方法,不能通过对象来调,编译都通不过
//println(json.parser(str))
//调用类的static方法,只能通过类名来调
println(JSON.parser(str))
// 尝试调用JSONObject中自己的方法
println(jo.childFormat(str))
//调用类的static方法,只能通过类名来调
println(JSONObject.childParser(str))
}
}
总结
- scala中调用java中静态方法只能使用当前类名,不能使用对象
- java中静态方法尽管是public在scala中都无法使用子类调用
- java中非静态子类继承父类的方法,在scala中可以使用子类对象调用
相关文章
- Java基础知识及细节之方法
- fileinputstream java_Java FileInputStream close()方法
- java 删除目录下所有文件_Java删除文件、目录及目录下所有文件的方法实例
- java bufferedwriter 编码,Java BufferedWriter对象与utf-8
- java中打印数组的方法_Java数组方法–如何在Java中打印数组
- java源程序文件的扩展名_使用Java语言编写的源程序保存时的文件扩展名是什么…
- java是面向对象还是面向过程_Java面向对象编程和面向过程编程的区别[通俗易懂]
- java控制台输入数组_Java控制台输入数组并逆序输出的方法实例
- java axis_Java 使用Axis实现WebService实例
- java notifyall_Java Thread notifyAll()方法[通俗易懂]
- java 取当前时间年月日_Java获取当前时间年月日的方法[通俗易懂]
- Java学习笔记 (成员内部类、静态内部类、匿名内部类、方法内部类)
- Java final方法详解编程语言
- 库MySQL Database Backup with Java.(java备份mysql)
- 技巧Linux环境下提高Java编译效率的技巧(linux下java编译)
- 策略研究Redis和Java实现的过期策略(redisjava过期)
- 构建Java应用程序中Redis集群的方法(java连redis集群)
- 深入学习:Linux下Java环境建设与配置(linux下java环境)
- 进程Linux下创建多个Java进程的简易方法(linux 多个java)
- C#匿名委托和Java匿名局部内部类使用方法示例
- java验证电话号码的方法