Java开发入门:接口与多态思想解析

需积分: 9 0 下载量 186 浏览量 更新于2024-08-05 收藏 554KB PDF 举报
"Java开发入门课程的第9天,主要讲解面向对象的多态思想以及接口的概念。文档可能包括接口的定义、接口与抽象方法的关系、接口的多继承性以及低耦合思想的实例分析。" 在Java编程中,面向对象的多态思想是一个核心概念,它允许我们设计出更具灵活性和扩展性的代码。多态性使得一个引用类型可以在不指定具体类型的情况下调用方法,这意味着我们可以使用父类引用指向子类对象,从而实现了代码的重用和通用性。 接口(Interface)是Java中实现多态的一种机制,它定义了一组抽象方法,这些方法没有具体的实现,只是声明了它们的存在。接口是一种规范,规定了实现它的类必须具备哪些功能。比如,我们可以定义一个`IWalkable`接口,其中包含一个`walk()`方法,任何实现这个接口的类都必须提供`walk()`方法的具体实现。这样,我们就可以创建一个可以行走的对象,而无需关心它是人还是动物。 在市场上的公牛和小米插座例子中,尽管品牌不同,但它们都遵循同一套标准,即插座的规格,这就好比接口定义的功能。因此,无论使用哪个品牌的插座,只要符合规格,都能正常工作。这就是接口带来的低耦合性,降低了不同组件间的依赖程度,提高了系统的灵活性和可维护性。 接口的另一个特性是它可以多继承。不同于Java中的类只能单继承,一个接口可以继承多个接口,这使得接口能够组合多种功能。例如,我们可以定义一个`ISwimable`接口用于游泳规范,然后创建一个`IAmphibian`接口,它同时继承`IWalkable`和`ISwimable`,代表既能在陆地行走又能水中游泳的生物。 从Java 8开始,接口还可以包含默认方法(default methods),这些方法有默认的实现,可以提供一些通用的功能,同时不会破坏已经存在的接口实现。此外,接口还可以定义静态方法,这些方法不属于任何特定的接口实现,而是直接通过接口调用。 总结来说,Java中的接口是多态性的重要工具,它定义了一组必须被实现的方法,促进了代码的模块化和低耦合。在实际开发中,合理使用接口可以提高程序的可扩展性和可维护性,使系统更加灵活适应需求变化。

2023-06-02 23:12:37 WARN NativeCodeLoader:60 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). Traceback (most recent call last): File "mysqlTest.py", line 12, in <module> jdbcDF=spark.read.format("jdbc").option("url","jdbc:mysql://localhost:3306/sparktest?useSSL=false").option("driver","com.mysql.cj.jdbc.Driver").option("dbtable","employee").option("user", "root").option("password", "123456").load() File "/usr/local/spark/python/pyspark/sql/readwriter.py", line 172, in load return self._df(self._jreader.load()) File "/usr/local/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__ File "/usr/local/spark/python/pyspark/sql/utils.py", line 63, in deco return f(*a, **kw) File "/usr/local/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py", line 328, in get_return_value py4j.protocol.Py4JJavaError: An error occurred while calling o31.load. : java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at org.apache.spark.sql.execution.datasources.jdbc.DriverRegistry$.register(DriverRegistry.scala:45) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$5.apply(JDBCOptions.scala:99) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$5.apply(JDBCOptions.scala:99) at scala.Option.foreach(Option.scala:257) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:99) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:35) at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:32) at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:318) at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) at py4j.Gateway.invoke(Gateway.java:282) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection.run(GatewayConnection.java:238) at java.lang.Thread.run(Thread.java:748)

2023-06-03 上传