接口 对象名1 = new 类名和类名 对象名2 = new 类名的区别是什么?

实例

/**
*Person.java 接口
*/
public interface Person {
void introduce();
} /**
* Programmer.java 实现类1
*/
public class Programmer implements Person{
@Override
public void introduce() {
System.out.println("我是一名Java程序员");
} public void play() {
System.out.println("我还是一个吉他手");
}
} /**
* Student.java 实现类2
*/
public class Student implements Person {
@Override
public void introduce() {
System.out.println("我是一名学生");
}
} /**
* Main.java
*/
public class Main {
public static void main(String[] args){
Person person; //声明接口变量
person = new Programmer();
person.introduce();
/*因为person是接口变量,如果写成person.play()会爆红;*/
((Programmer) person).play();
     Programmer person2 = new Programmer();
/*因为person2是实现类变量,所以写成person.play()不会爆红*/
person2.play();
System.out.println("----------------");
person = new Student();
person.introduce();
}
}

总结:

使用 接口 对象名 = new 类名 的方式实例化的对象只能调用接口中有的方法,而不能调用类中特有的方法。

而使用 类名对象名 = new 类名 的方式创建出来的对象可以调用所有的方法。

最新文章

  1. 从头开始搭建一个mybatis+postgresql平台
  2. Pop Sequence
  3. DataTable中的数据赋值给model z
  4. Bootstrap_组件
  5. cocos2d-x 知识小结(1)zorder和tag
  6. C# 启动外部程序的几种方法
  7. !! python 之半年总结
  8. 根据查询结果创建新表create table .. as (select....)
  9. 解决centos7安装wmwaretools找不到kernel header
  10. 重操JS旧业第三弹:Array
  11. MongoDB集群与LBS应用系列(一)
  12. 安装Java Cer证书
  13. [HNOI2013]游走 期望+高斯消元
  14. layui选项卡同步问题
  15. python之地基(三)
  16. 关于<超文本>定义
  17. Android WebView的HTML中的select标签不起作用
  18. 【笔记】Python基础五:装饰器
  19. Idea 12配置SPring MVC 和Tomcat Server
  20. tomcat8 JVM 优化

热门文章

  1. Fiddle过滤目标主机
  2. 【软件测试部署基础】gradle的认识
  3. git 常用命令 command 1.0(本地 local repository 对远程仓库 remote repository 的操作)
  4. java中的反射(三)
  5. 半夜删你代码队 Day1冲刺
  6. Nodepad++ 没有TextFX Characters插件
  7. FirstCode异常 此引用关系将导致不允许的周期性引用
  8. django 验证码
  9. 搭建本地yum镜像源
  10. vue单页面应用刷新网页后vuex的state数据丢失的解决办法