这个其实是面向对象中的多态的体现。
而且也不要说接口可以定义对象,应该这么这么应该会好点,叫做接口的引用指向它的实现类的对象。
DriverManagergetConnection();来获得一个Connection对象,大家都知道,各数据库都提供了相应的jdbc的实现,并且在实现中也都实现了Connection接口,而getConnection方法正是返回了实现了Connection接口的类的对象。
建议把面向对象的多态机制了解清楚。
问题:添加一个对象到集合中时,集合里面存放的是对象的引用还是对象本身?
答:对象的引用。以下代码可以证明:
Java代码
import javautilArrayList;
import javautilList;
public class Test5 {
public static void main(String args[]){
List<User> userList1 = new ArrayList<User>();
List<User> userList2 = new ArrayList<User>();
User user1 = new User();
userList1add(user1);
userList2add(user1);
Systemoutprintln("SET VALUE FOR USERLIST2:");
for(User user: userList2){
usersetName("name");
usersetPassword("password");
}
Systemoutprintln("PRINT VALUE FOR USERLIST1:");
for(User user: userList1){
Systemoutprintln(usergetName());
Systemoutprintln(usergetPassword());
}
}
public static class User{
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
thispassword = password;
}
}
}
其输出结果是:
SET VALUE FOR USERLIST2:
PRINT VALUE FOR USERLIST1
name
password
设置userList2中元素的value,但是userList1中元素的value也发生了改变,证明集合中存放的是对象的引用。
有一个很简单的例子,javautil中的类ArrayList实现了接口List则生成ArrayList对象时可用以下语句
List list=new ArrayList();
也就是说所有实现了接口List的类,都可以用List接口来声明对象类型,然后用实体类进行实例化这表明了接口可以用来作为类型的表述当然,生成的对象list只能调用接口List中提供的方法
同样的 *** 作也可以用在父类与子类身上,例如设A类是B类的父类
则创建B类对象的时候可以用以下语句
A b=new B();
这样的用法可以大大提高编程的灵活性~
1 只要他曾被一个类实例化,这里调用的就是那个类中的实现了的方法。
所有运行中必须是实例的方法,调的是是实现了它的类中的实现好了的方法
2。接口到底有什么好处?SDK对于接口是怎么抽象出来的?
接口的好处在于为某些事情提供统一的规范。调用者只需要知道调用这个接口的方法而不用考虑具体实现。另外, java作为面向对象语言,不赞成超过3层的继承。但是有时候要实现这样的继承,就要用到接口。譬如线程实例。extends thred implements runable接口的抽象没有具体规定,通用原则就是定义一些常用的方法。
3。在一个实现接口的类a中定义了另一个类b(b也实现一个接口)的对象c,这个对象c为什么只在a的构造函数中可见在外面我取不到它的值。
不明白你的具体问题。如果是作为类变量,c在整个a类中都是可见的才对。
有时候我们将一个“学生”看做“一个人”,并不在意他是什么职业,比如还有一个类叫Teacher,他也是一个人,这时候,学生和老师在“人”这个层次就具有共性了,当你针对这个层面进行编程时,Person类型的引用就会帮你屏蔽他们独有的特性,给你提供统一的接口。
不用写成你那么麻烦 直接写成Person p = new Student();即可 这是为了让买你代码的人看不到你内部代码 怎么实现的被你隐藏了 不信你可以Ctrl+鼠标左键点Person p它查不到你源码
你这提问体现了
1Java的多态性 就是多种变现形式 接口跟实现类都能完成同样的功能
2隐藏内部代码块 人家只知道用p能调用Student的功能但是不知道你 Student类是怎么实现的
3解耦合性 Java的接口多继承
你这13年的问题 估计你也看不到了 就当为了以后看到的人服务了
以上就是关于为什么接口能定义对象全部的内容,包括:为什么接口能定义对象、集合对象引用调用接口返回的是啥、JAVA 将接口的引用指向实现类的对象等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)