- 继承
- 方法的重写
- 父类引用指向子类对象
public class DuoTai{
public static void main(String[] args){
//条件3:父类引用指向子类对象
FatherClass fc = new SonClass();
fc.test();
}
}
class FatherClass{
void test(){
System.out.println("Father");
}
}
//条件1:子类继承父类
class SonClass extends FatherClass{
void test(){
//条件2:子类重写父类方法
System.out.println("Son");
}
}
三.多态条件理解
条件二、三为假
public class DuoTai{
public static void main(String[] args){
//条件3不满足
FatherClass fa = new FatherClass();
SonClass sa = new SonClass();
BClass ba = new BClass();
ba.printout(fa);
ba.printout(sa);
}
}
class FatherClass{
void test(){
System.out.println("Father");
}
}
//条件1:子类继承父类
class SonClass extends FatherClass{
void test(){
//条件2:子类重写父类方法
System.out.println("Son");
}
}
class AClass{
void printout(FatherClass fa){
System.out.println("A Father");
}
}
//B条件1:子类继承父类
class BClass extends AClass{
//B条件2不满足
void printout(SonClass sa){
System.out.println("B Son");
}
}
条件三理解:父类引用指向子类对象B条件2处,子类BClass方法的参数返回值虽然一致,但参数列表不同(参数是父类和子类关系也不行)。因此,子类对父类方法没有进行重写,而是进行了重载。
- 第一种情况
FatherClass fa = new SonClass();
- 第二种情况
public class DuoTai{
public static void main(String[] args){
FatherClass fa = new FatherClass();
SonClass sa = new SonClass();
AClass aa = new AClass();
aa.printout(fa);
//条件3满足?
aa.printout(sa);
}
}
class FatherClass{
}
//条件1:子类继承父类
class SonClass extends FatherClass{
}
class AClass{
void printout(FatherClass fa){
System.out.println("A Father");
}
}



