一,类名作为形参和返回值
方法的形参是类名,其实需要的是该类的对象
方法的返回值是类名,其实返回的是该类的对象
二,抽象类名作为形参和返回值
方法的形参是抽象类名,其实需要的是抽象类的子类对象
方法的返回值是抽象类名,其实返回的是抽象类的子类对象
三,接口名作为形参和返回值
方法的形参是接口名,其实需要的是接口的实现类对象
方法的返回值是接口名,其实返回的是接口的实现类对象
四,案例
类名作为形参和返回值之前的学生信息管理案例有所涉及,不再练习
PlayGame接口
public interface PlayGame {
String name="小米";
void playgame();
void show(PlayGame p);
}
Phone抽象类
public abstract class Phone {
public String name;
public abstract void call();
public abstract void send();
public abstract void show(Phone p);
}
elderphone,cellphone类
public class ElderPhone extends Phone{
@Override
public void call(){
System.out.println("老年机可以打电话");
}
@Override
public void send(){
System.out.println("老年机可以发信息");
}
public Phone newelderphone(){
Phone p=new ElderPhone();
return p;
}
@Override
public void show(Phone p){
System.out.println(p.name+"这是一个老年机");
}
}
public class CellPhone extends Phone implements PlayGame{
@Override
public void call(){
System.out.println("智能机可以打电话");
}
@Override
public void send(){
System.out.println("智能机可以发信息");
}
@Override
public void show(Phone p) {
System.out.println("智能机");
}
@Override
public void playgame(){
System.out.println("智能机可以玩游戏");
}
public PlayGame newcellphone(){
PlayGame p=new CellPhone();
return p;
}
@Override
public void show(PlayGame p){
System.out.println(p.name+"可以玩游戏");
}
}
测试类
public class test {
public static void main(String[] args) {
System.out.println("--------------------");
ElderPhone ep=new ElderPhone();
// 返回值是Phone类类型,实际上返回的是Phone的子类对象
Phone ep1=ep.newelderphone();
ep1.call();
// 形参是Phone类类型,实际上传的是Phone的子类对象
Phone ep2=new ElderPhone();
ep2.name="诺基亚";
// 将name赋值给ep2,可以看出show中传的参数确实是ep2
ep1.show(ep2);
System.out.println("--------------------");
CellPhone cp=new CellPhone();
// 返回值是接口名PlayGame,其实返回的是接口的实现类对象
PlayGame cp1=cp.newcellphone();
cp1.playgame();
// 形参是接口名PlayGame,其实需要传入的是接口的实现类对象
PlayGame cp2=new CellPhone();
cp1.show(cp2);
}
}
测试结果