对象多态性严格来讲现在只能为其讲解基本概念,以及相关使用限制
多态性依赖:方法的覆写
以下的内容只是为了解释多态性的特点,代码本身并没有意义
观察如下程序
class A{
public void print(){
System.out.println("A.public void print()");
}
}
class B extends A{
public void print(){
System.out.println("B.public void print()");
}
}
public class testDemo{
public static void main(String args[]){
B b = new B();
b.print();
}
}

多态性严格来讲有两种描述形式
1.方法的多态性
|-方法的重载:同一个方法名称,根据传入参数的类型及个数不同执行不同的方法体
|-方法的覆写:同一个方法,会根据子类的不同,实现不同的功能
2.对象的多态性:指的是发生在继承关系类之中,子类和父类之间的转换问题
|-向上转型(自动完成):父类 父类对象=子类实例
|-向下转型(强制完成):子类 子类对象=(子类)父类实例
向上转型
class A{
public void print(){
System.out.println("A.public void print()");
}
}
class B extends A{
public void print(){
System.out.println("B.public void print()");
}
}
public class testDemo{
public static void main(String args[]){
A b = new B();
b.print();
}
}

向下转型
class A{
public void print(){
System.out.println("A.public void print()");
}
}
class B extends A{
public void print(){
System.out.println("B.public void print()");
}
}
public class testDemo{
public static void main(String args[]){
A a = new B();
B b = (B) a;
b.print();
}
}

以上的转型操作难道只是为了一个向上和向下的转型处理吗?没有其它意义吗?
由上转型:由于所有的子类对象实例都可以自动的身上转型,所以在于参数的统一上
代码示例
class A{
public void print(){
System.out.println("A.public void print()");
}
}
class B extends A{
public void print(){
System.out.println("B.public void print()");
}
}
class C extends A{
public void print(){
System.out.println("C.public void print()");
}
}
public class testDemo{
public static void main(String args[]){
// 只要是A类的子类都可以使用向上转型,由A类接收
A a1 = new B(); // 向上转型
A a2 = new C(); // 向上转型
a1.print();
a2.print();
}
}

参数统一之后,还可以调用子类覆写后的方法体,即同一个方法针对不同的子类可以有不同的实现
向下转型:指的是父类要调用子类自己特殊的方法,所有的父类发生了向上转型之后只能够看见父类自己定义的全部方法信息,但是看不见子类特殊的方法,于是此时就需要使用向下转型将父类对象转换为子类对象此时就可以使用子类的特殊功能