Java基础--接口回调(接口 对象名 = new 类名)理解
阅读原文时间:2023年07月08日阅读:1

接口 对象名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 类名 的方式创建出来的对象可以调用所有的方法。