版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18948359/article/details/83868934
Java基础知识回顾之封装性
Java基础知识回顾之继承性
Java基础知识回顾之多态性
简介
多态的核心就是类型的一致性。对象上的每一个引用和静态的类型检查器都要确认这样的依附(多个子类继承一个父类)。
多态性严格来讲有两种描述形式
-
方法的多态性
- 方法的重载:同一个方法名称,会根据传入参数的类型以及个数不同执行不同的方法体。
- 方法的覆写:同一个方法,会根据子类的不同实现,实现不同的功能。
-
对象的多态性:指的是发生在继承关系类之中,子类和父类之间的转换问题。
- 向上转型(自动完成):
父类 父类对象 = 子类实例;
- 向下转型(强制转换):
子类 子类对象 = (子类)父类实例;
- 向上转型(自动完成):
实例说明
向上转型
class A{
public void print() {
System.out.println("A、public void print()");
}
}
class B extends A{
@Override
public void print() {
System.out.println("B、public void print()");
}
}
public class TestDemo {
public static void main(String[] args) {
// 使用向上转型
A a = new B();
a.print(); // 输出结果: B、public void print()
}
}
向下转型
public class TestDemo {
public static void main(String[] args) {
// 使用向上转型
A a = new B();
a.print(); // 输出结果: B、public void print()
// 向下转型,强制转换
B b = (B) a; // 输出结果: B、public void print()
}
}
说明
向上转型:由于所有的子类对象实例都可以自动的向上转型,所以在于参数的统一上。即:同一个方法针对于不同的子类可以有不同的实现。
class A{
public void print() {
System.out.println("A、public void print()");
}
}
class B extends A{
@Override
public void print() {
System.out.println("B、public void print()");
}
}
class C extends A{
@Override
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 B();
a1.print(); // 输出结果: B、public void print()
a2.print(); // 输出结果: C、public void print()
}
}
向下转型:指的是父类要调用子类自己特殊的方法;所有的父类只能调用到在父类中定义了的信息,对于子类扩充的方法,是调用不到的,对于这个情况,就需要向下转型,获取子类的特殊方法。
class A{
public void print() {
System.out.println("A、public void print()");
}
}
class B extends A{
@Override
public void print() {
System.out.println("B、public void print()");
}
public void funB() {
System.out.println("B 中扩充的方法");
}
}
public class TestDemo {
public static void main(String[] args) {
// 通过向上转型获取到 A 对象
A a = new B();
// a.funB(); 此时这段是会报错的,因为 a 类中没有 funB方法。
// 如果需要调用,就需要使用向下转型
B b = (B) a;
b.funB(); // 此时就可以调用 funB方法
}
}