当类名作为形式参数时:
我们用代码来体会:
public class Person {
public void show(){
System.out.println("父类的show方法");
}
}
public class Student extends Person {
@Override
public void show() {
super.show();
System.out.println("子类的show方法");
}
}
class Test{
public static void main(String[] args) {
Person p=new Student();
method(p);
}
public static void method(Person p){
p.show();
}
}
父类的show方法
子类的show方法
如果一个方法的形参要一个类 类型,你就传该类的一个对象
当抽象类名做为参数时:
public abstract class Person {
public abstract void show();
}
public class Student extends Person {
@Override
public void show() {
System.out.println("子类的show方法");
}
}
class Test{
public static void main(String[] args) {
Person p=new Student();
method(p);
}
public static void method(Person p){
p.show();
}
}
子类的show方法
如果一个方法的形参的类型是一个抽象类 类型,那么你就传该抽象类的子类对象
同样的,如果一个方法的形参的类型是一个接口类 类型,那么你就传该接口类的子对象
接口名和抽象类名作为返回值类型:
public interface JieKou {
void sing();
}
public abstract class Person {
public abstract void show();
}
public class Student extends Person implements JieKou {
@Override
public void show() {
System.out.println("子类的show方法");
}
@Override
public void sing() {
System.out.println("会唱歌");
}
}
class Test{
public static void main(String[] args) {
Person p=person();
p.show();
JieKou ji=ji();
ji.sing();
}
public static Person person(){
return new Student();
}
public static JieKou ji(){
return new Student();
}
}
可以总结出:
如果一个方法的返回值类型要一个抽象类 类型,那么你就返回一个该类的子类对象;
如果一个方法的返回值类型要一个接口类型,你就返回一个 该接口的子类对象。