J2SE论坛网»J2SE技术»百思不得其解,请高手指教!
百思不得其解,请高手指教!
问?:
java.sql.Connection conn = DriverManager.getConnection(......);
java.sql.Statment stmt = conn.createStatement(.........);
public static Connection getConnection(String url,
Properties info)
throws SQLException
Connection是个接口,为什么它可以调用方法???
接口不是不可以调用方法吗?
高手请多多指教阿!我郁闷了,怎么也想不出来为什么。。。。
java.sql.Statment stmt = conn.createStatement(.........);
public static Connection getConnection(String url,
Properties info)
throws SQLException
Connection是个接口,为什么它可以调用方法???
接口不是不可以调用方法吗?
高手请多多指教阿!我郁闷了,怎么也想不出来为什么。。。。
答!: 1:
哈哈..终于坐上板凳了.
答!: 2:
恭喜你,板凳坐了,问题也要给解决下阿:)
答!: 3:
接口可以调用方法,但是不能实例化
答!: 4:
接口可以调用方法,但是不能实例化
——————————————
可是接口里面根本没有实现阿
——————————————
可是接口里面根本没有实现阿
答!: 5:
接口里面的方法在后续实现的类里面有实现,虽然接口的代码是空,但是它的实现类的代码是存在的
答!: 6:
接口不能直接实例化 可以通过new一个实现的类
或者返回接口的类型的方法来实例化
然后就可以调用接口里定义的方法了
自动会去找实现的类的方法
或者返回接口的类型的方法来实例化
然后就可以调用接口里定义的方法了
自动会去找实现的类的方法
答!: 7:
我以前也有过楼主一样的疑惑
java.sql.Connection conn = DriverManager.getConnection(......);
Statment stmt = conn.createStatement(.........);
Connection是接口,可DriverManager.getConnection(......)返回的是一个实现Connection接口的实例,conn指向的是对象已经实现乐接口(那些接口里的方法已经实现乐),所以conn可以调用乐
java.sql.Connection conn = DriverManager.getConnection(......);
Statment stmt = conn.createStatement(.........);
Connection是接口,可DriverManager.getConnection(......)返回的是一个实现Connection接口的实例,conn指向的是对象已经实现乐接口(那些接口里的方法已经实现乐),所以conn可以调用乐
答!: 8:
可是jdk文档里面getConnection返回的还是一个Connection啊,这就是我最迷惑的地方!
public static Connection getConnection(String url,
Properties info)
throws SQLException
public static Connection getConnection(String url,
Properties info)
throws SQLException
答!: 9:
看看源码就清楚了...
Connection是接口,虽然不能实例化,但是可以创建对象....
DriverManager.getConnection()返回的是Connection的对象,看清楚了..是对象哦..
现在让conn指向了DriverManager.getConnection()返回来的对象...
然后可以调用了吧..
Connection是接口,虽然不能实例化,但是可以创建对象....
DriverManager.getConnection()返回的是Connection的对象,看清楚了..是对象哦..
现在让conn指向了DriverManager.getConnection()返回来的对象...
然后可以调用了吧..
答!: 10:
不要被左值迷惑了。。。。
答!: 11:
可是jdk文档里面getConnection返回的还是一个Connection啊,这就是我最迷惑的地方!
public static Connection getConnection(String url,
Properties info)
throws SQLException
---------------------------------------
举个例子:
interface Connection;
class ConnectionA implements Connection
{
//实现代码
};
在函数中
public static Connection getConnection(String url,
Properties info)
throws SQLException
{
return new ConnectionA;
}
函数返回的是一个实例类ConnectionA,在ConnectionA 中的方法是实现的方法,明白吗?
public static Connection getConnection(String url,
Properties info)
throws SQLException
---------------------------------------
举个例子:
interface Connection;
class ConnectionA implements Connection
{
//实现代码
};
在函数中
public static Connection getConnection(String url,
Properties info)
throws SQLException
{
return new ConnectionA;
}
函数返回的是一个实例类ConnectionA,在ConnectionA 中的方法是实现的方法,明白吗?
答!: 12:
好像明白了。我看了源代码可是才疏学浅没看明白。那位大哥给我解释一下它里面返回的对象是什么类型的阿,我找不到呢!多谢了!!
答!: 13:
//接口
public interface A{
public void print();
}
//实现类
public class B implements A{
public void print(){
System.out.println("aaaaaaaaaaa");
}
}
//测试类
public class Test{
public static void main(String args[]){
A a=new B();
a.print();
}
}
//结果是:aaaaaaaaaaa
//输出结果是调用了其实现类的print()方法
public interface A{
public void print();
}
//实现类
public class B implements A{
public void print(){
System.out.println("aaaaaaaaaaa");
}
}
//测试类
public class Test{
public static void main(String args[]){
A a=new B();
a.print();
}
}
//结果是:aaaaaaaaaaa
//输出结果是调用了其实现类的print()方法
答!: 14:
源代码,你自己慢慢看吧,。。。。。。。。。。。。。
答!: 15:
我看了半天,也没看出来他到底返回了什么类型的对象。。。
答!: 16:
谁告诉你接口不可以调用方法?
答!: 17:
(讲通俗点)
Connection是接口,接口当然调用不了方法。
但是,
DriverManager.getConnection("","","");
此方法能返回一个对象,该对象是Connection类型的。
此时:Connection con = DriverManager.getConnection("","","");
con就代表了那个真实对象(该对象具备了Connection声明的全部方法),就能调用方法了。
Connection是接口,接口当然调用不了方法。
但是,
DriverManager.getConnection("","","");
此方法能返回一个对象,该对象是Connection类型的。
此时:Connection con = DriverManager.getConnection("","","");
con就代表了那个真实对象(该对象具备了Connection声明的全部方法),就能调用方法了。
答!: 18:
jdk文档里的接口一般都写着
所有超级接口:
所有已知子接口:
所有已知实现类:
怎么Connection没有写呢?
那么返回的对象又怎么可以赋给Connection接口呢?
越来越迷惑了 。。。
所有超级接口:
所有已知子接口:
所有已知实现类:
怎么Connection没有写呢?
那么返回的对象又怎么可以赋给Connection接口呢?
越来越迷惑了 。。。
答!: 19:
java的封装是非常厉害的,这个的确是java的优势,但是也让人讨厌,代码一层套一层,往往看了一行代码,要找到10多个类才能知道他到底干了什么,看不明白,慢慢看,特别是现在成熟的代码,封装更厉害,但是用Connection作工作只要知道Connection能干什么就好了,如果你有java的类模式基础看起来会快些
答!: 20:
DriverManager.getConnection(......)返回的是一个“实现Connection接口的”的类的对象
举个例子
class A implement Connection{
//类A中实现Connection定义的方法和类A自己的东西
}
getConnection()中返回A的对象话,
可以用做A类型
比如:A a=getConnection();
也可以用做Connection类型
比如:Connection b=getConnection();
但要注意:a和b中可以使用的变量和函数就不同了,要是ab的类型而定了
举个例子
class A implement Connection{
//类A中实现Connection定义的方法和类A自己的东西
}
getConnection()中返回A的对象话,
可以用做A类型
比如:A a=getConnection();
也可以用做Connection类型
比如:Connection b=getConnection();
但要注意:a和b中可以使用的变量和函数就不同了,要是ab的类型而定了
答!: 21:
jdk文档里的接口一般都写着
所有超级接口:
所有已知子接口:
所有已知实现类:
怎么Connection没有写呢?
那么返回的对象又怎么可以赋给Connection接口呢?
越来越迷惑了 。。。
-------------------------------
Connection的实现是厂家规范,不是sun的sdk规范,明白?没有厂家的Connection的实现都不同
即mysql和oracle的Connection的实现是不同的,这个不在规范里面,但是Connection本身是规范的一部分,如何实现不是
所有超级接口:
所有已知子接口:
所有已知实现类:
怎么Connection没有写呢?
那么返回的对象又怎么可以赋给Connection接口呢?
越来越迷惑了 。。。
-------------------------------
Connection的实现是厂家规范,不是sun的sdk规范,明白?没有厂家的Connection的实现都不同
即mysql和oracle的Connection的实现是不同的,这个不在规范里面,但是Connection本身是规范的一部分,如何实现不是
答!: 22:
在上面的例子中,我们只使用Connection的方法就可以了,并不要关心A的具体名字叫什么
换句话说:它叫A也可以,叫小猫小狗也可以啊,只是个名字罢了。
如果真想知道,就只好去看java的原代码了
换句话说:它叫A也可以,叫小猫小狗也可以啊,只是个名字罢了。
如果真想知道,就只好去看java的原代码了
答!: 23:
public class Test {
public static void main(String[] args) {
Manager manager = new Manager();
Actable plane1 = new Plane("奋进号");
plane1.act();
Actable animal1 = new Animal("小花狗");
animal1.act();
}
}
interface Actable {
void act();
}
class Plane implements Actable {
String code;
public Plane(String code){
this.code=code;
}
public void act(){
System.out.println(this.code + " is flying!");
}
}
class Animal implements Actable {
String name;
public Animal(String name){
this.name=name;
}
public void act(){
System.out.println(this.name + " is running!");
}
}
public static void main(String[] args) {
Manager manager = new Manager();
Actable plane1 = new Plane("奋进号");
plane1.act();
Actable animal1 = new Animal("小花狗");
animal1.act();
}
}
interface Actable {
void act();
}
class Plane implements Actable {
String code;
public Plane(String code){
this.code=code;
}
public void act(){
System.out.println(this.code + " is flying!");
}
}
class Animal implements Actable {
String name;
public Animal(String name){
this.name=name;
}
public void act(){
System.out.println(this.name + " is running!");
}
}
答!: 24:
也就是说Connection是各个厂商自己实现的,这样理解好像明白多了。
多谢 harshing(西边的太阳)
还有回帖的各位!
多谢 harshing(西边的太阳)
还有回帖的各位!
答!: 25:
也就是说Connection是各个厂商自己实现的,这样理解好像明白多了。
---------------------------------
所以,我们要从不同的数据库的驱动商那里下载不同的jdbc的驱动包,那个jdbc的驱动包里就是Connection的实现,为了驱动不同的数据库,我们要下载不同的jdbc驱动包,就是这么回事。
至于厂家规范和sun的规范的区分,很多地方都可以见到,包括EJB、WEB的配置里面都有
---------------------------------
所以,我们要从不同的数据库的驱动商那里下载不同的jdbc的驱动包,那个jdbc的驱动包里就是Connection的实现,为了驱动不同的数据库,我们要下载不同的jdbc驱动包,就是这么回事。
至于厂家规范和sun的规范的区分,很多地方都可以见到,包括EJB、WEB的配置里面都有
答!: 26:
基础不够扎实啊
插播一条广告,小店新开张,优惠出售各种手工艺品,欢迎大家选购,是各位帅哥送女朋友、老婆、情人(OR各位美女送男朋友、老公、情人)的不二选择
http://shop33881320.taobao.com/
插播一条广告,小店新开张,优惠出售各种手工艺品,欢迎大家选购,是各位帅哥送女朋友、老婆、情人(OR各位美女送男朋友、老公、情人)的不二选择
http://shop33881320.taobao.com/
答!: 27:
这个是java的动态联编机制, 由jvm在程序运行时决定该去执行什么操作, 他执行的实际上是实现此接口的类的具体实现方法,所以在java的开发中应该养成“面向接口编程”的好习惯。
答!: 28:
接口可以调用实现了它的子类的方法嘛
相关JAVA教程:
请帮忙看一段代码
linux中Runtime.exec(cmd)只要cmd中带|grep的都不能取得InputStream,为什么?
用javascript验证数据类型??
我是个初学者,大家帮我分析这段代码
各位帮帮忙,关于越界问题
proguard 中如何保留所有继承了Serializable 的类
求java操作telnet
达人们帮我看看问题在哪里
每隔1秒鐘就去檢查一個變量,當那變量變為0時,就println(“end”)怎麼寫呢?
java泛型问题
一个多线程的问题
newDialog为什么传递不了数据!SOS!