Java多态之编译看左,运行看左/右

Java中多态的前提:
        A:有继承关系
        B:有方法重写(不是必须)
        C:有父类引用指向子类对象

多态中成员的访问特点:
        A:成员变量:编译看左边,执行看左边。
        B:成员方法:编译看左边,执行看右边。

多态的好处:提高了程序的扩展性
        具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作。
多态的弊端:不能使用子类的特有功能

向上转型:
         从子到父
         父类引用指向子类对象
向下转型:
         从父到子
         父类引用转为子类对象

代码(父类/子类/实现类/Console:):

package com.test;

public class Person {
	// private String name;
	public String name = "PersonName";// 测试,暂且改为public
	// private int age;
	public int age = 20; // 测试,暂且改为public

	public void eat() {
		System.out.println("父类方法:人都要吃饭");
	}

	public void sleep() {
		System.out.println("父类方法:人都要睡觉");
	}

	//get/set方法等。。。
}
package com.test;

public class Student extends Person {
	// private String name;
	public String name = "StudentName";// 测试,暂且改为public
	// private int age;
	public int age = 18; // 测试,暂且改为public

	public int studentNum = 001;

	@Override // 子类重写父类eat方法
	public void eat() {
		System.out.println("子类重写方法:学生要吃饭");
	}

	@Override // 子类重写父类sleep方法
	public void sleep() {
		System.out.println("子类重写方法:学生都要睡觉");
	}

	public void study() {
		System.out.println("子类独有方法:学生要学习");
	}

	// get/set方法等。。。

}
package com.test;

public class TestDemo {
	public static void main(String[] args) {
		// 多态中成员的访问特点:
		// A:成员变量:编译看左边,执行看左边。
		// B:成员方法:编译看左边,执行看右边。

		// 多态,向上转型:
		Person p = new Student();
		// 编译看左边:
		// p.studentNum //访问子类独有成员变量报错,编译不通过
		// p.study(); //访问子类独有成员方法报错,编译不通过

		// 成员变量:运行看左边
		System.out.println(p.name); // PersonName
		System.out.println(p.age);// 20

		// 成员方法:运行看右边
		p.eat();// 子类重写方法:学生要吃饭
		p.sleep();// 子类重写方法:学生都要睡觉

	}
}
Console:
PersonName
20
子类重写方法:学生要吃饭
子类重写方法:学生都要睡觉

相关资料:


欢迎大家交流指正,讨论完善!

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值