多态
一.多态的条件
- 继承
- 方法的重写
- 父类引用指向子类对象
二.多态举例
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");
}
}
class A{
public int i;
public A(int i){
this.i = i;
}
public boolean equals(Object obj ){
//A aa = (A)obj;
if(this.i == ((A)obj).i)
return true;
else
return false;
}
}
public class TestStringEquals_1{
public static void main(String args[]){
A aa1 = new A(2);
A aa2 = new A(2);
System.out.println(aa1.equals(aa2));
if (aa1 == aa2)
System.out.printf("aa1和aa2相等\n");
else
System.out.printf("aa1和aa2不等\n");
System.out.println(aa1);
System.out.println(aa2);
}
}