测试一:成员变量:编译时期向左看,运行时也向左看

测试二:成员方法:编译时期向左看,运行时期向右看

什么是多态呢?

多态可以理解为是同一个方法由于发送对象的不同而执行不同的行为方式。

一个对象的实际类型是确定的,但是引用类型是不确定的。

举个例子:

new Student();//这个对象的实际类型就是学生类
Student s1 = new Student();//学生类型的引用指向了这个学生对象
Person s2 = new Studnet();//人类型的引用指向了,这个学生对象
这也就是我们常说的父类的引用指向了子类的对象(注意:这里一定得是父类的引用才能指向子类的对象,不存在继承关系的类,是不能实现多态的)
多态是方法的多态,不是属性的多态
多态是同一个方法由于发送对象的不同,而执行的行为不同,这就是多态。

多态存在的条件:
从上面的叙述我们不难看出,多态的条件有哪些:

有继承关系
子类重写了父类的引用
分类的应用指向了子类对象
不同的引用实现的,指向的对象是不同的
new Student();//这个对象的实际类型就是学生类
Student s1 = new Student();//学生类型的引用指向了这个学生对象
Person s2 = new Studnet();//人类型的引用指向了,这个学生对象
/*
s1 可以调用person类中的方法(由于s1继承的person类),也可以调用自身的方法,如果s1中重写了person类中的方法,那么执行的时候,s1执行,重写方法的行为。
s2 可以调用peroson类中的方法,但是不能调用student类中的方法。(也就是我们常说的父类不能调用,子类中特有的方法)。如果,子类重写了父类的方法,在执行的时候,会执行重写方法的行为。

可以简单的总结为:编译看左边,运行看右边。

什么样的方法不能被重写:
static修饰的方法(static修饰的方法是静态方法,属于类,不属于实例)
final修饰的方法
private修饰的方法
多态引用在什么地方呢?
1.多态数组的使用,数组定义为父类型,但是,实际为子类型
2.方法定义的形参为父类型,但是实际参数,可以是子类型
多态的好处:
提高了代码的维护性(继承)
提高了代码的拓展性(多态)
提高了代码的安全性(将对象进行了隐藏,不对外暴露)

class Animal{
    // 如果父类中没有call方法,那么子类中也不能调用该方法,编译时会出错
    public void call(){
        System.out.println("动物再叫。。。。。。。。");
    }
    
}
class Dog extends Animal{
    public void call() {
        System.out.println("狗在叫。。。。。。。");
    }
}

/**
 * 要实现多态,需要满足以下条件
 * 1.要有继承关系
 * 2.方法的重写
 * 3.要有父类的引用指向子类对象
 */
public class Study_DuoTai {
    public static void main(String[] args) {
        // 父类引用指向子类对象
        Animal a1 = new Dog();
        a1.call();
    }
}

原文地址:http://www.cnblogs.com/ch2020/p/16847329.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性