·多态的依赖:方法的覆写
·方法的多态性:
|-方法的重载:同一个方法名称,根据传入参数的类型及个数不同执行不同的方法体;
|-方法的覆写:同一个方法名称,根据子类的不同,实现不同的功能。
·对象的多态性:发生在继承关系的类中,子类和父类之间的转换
|-向上转型(自动完成)父类 父类对象 = 子类实例;
|-向下转型(强制完成)子类 子类对象 = (子类)父类实例;
范例1:向上转型
class A {
public void print() {
System.out.println("A类print()方法");
}
}
class B extends A {
public void print() {
System.out.println("B类print()方法");
}
}
public class Demo01 {
public static void main(String[] args) {
A a = new B();
a.print();
}
}
==============分割线==============
范例2:向下转型
class A {
public void print() {
System.out.println("A类print()方法");
}
}
class B extends A {
public void print() {
System.out.println("B类print()方法");
}
}
public class Demo01 {
public static void main(String[] args) {
A a = new B();
B b = (B)a;
b.print();
}
}
==============分割线==============
范例3:向上转型
class A {
public void print() {
System.out.println("A类print()方法");
}
}
class B extends A {
public void print() {
System.out.println("B类print()方法");
}
}
class C extends A {
public void print() {
System.out.println("C类print()方法");
}
}
public class Demo01 {
public static void main(String[] args) {
A a1 = new B();
A a2 = new C();
a1.print();
a2.print();
}
}
==============分割线==============
范例4:向下转型
·向下转型:父类要调用子类自己的特殊方法
class A {
public void print() {
System.out.println("A类print()方法");
}
}
class B extends A {
public void print() {
System.out.println("B类print()方法");
}
public void funB() {
System.out.println("B类的funB()方法");
}
}
public class Demo01 {
public static void main(String[] args) {
A a = new B();
B b = (B) a;
b.funB();
}
}
==============分割线==============
范例5:向下转型
class A {
public void print() {
System.out.println("A类print()方法");
}
}
class B extends A {
public void print() {
System.out.println("B类print()方法");
}
public void funB() {
System.out.println("B类的funB()方法");
}
}
public class Demo01 {
public static void main(String[] args) {
fun(new B());// 向上转型
}
public static void fun(A a) {// 统一参数
// 调用个性化特征
B b = (B) a;// 因为要调用子类的特殊方法
b.funB();
}
}
==============分割线==============
为了保证转型的顺利,使用关键字 instanceof
范例5:对象 instanceof 类 返回boolean值
class A {
public void print() {
System.out.println("A类print()方法");
}
}
class B extends A {
public void print() {
System.out.println("B类print()方法");
}
public void funB() {
System.out.println("B类的funB()方法");
}
}
public class Demo01 {
public static void main(String[] args) {
A a = new B();
System.out.println(a instanceof A);
System.out.println(a instanceof B);
if (a instanceof B) {
B b = (B) a;
b.print();
}
}
}