Java学习笔记_多态{2019.7.18}

概念:
多态就是事物存在的多种形态

Java中的多态存在的条件:

  1. 存在继承关系
  2. 子类中要有对父类的方法重写
  3. 多态要有父类引用指向子类对象

多态中的访问成员变量:
编译看左边(父类),运行看左边(父类)

 		Father son = new Son();
		System.out.println(son.num);

输出结果是看Father类中的num。

多态访问成员方法:
编译看左边(父类) ,运行看右边(子类)

Father son = new Son();) 
son.eat();

执行的是Son这个类中的eat方法。

多态访问静态方法:
编译看左边(父类) ,运行看左边(父类)
但是这种写法没有必要,因为静态方法可以直接调用,不需要通过对象。

多态中的向上转型和向下转型:
向上转型:子类对象赋值非父类

Person p = new SuperMan();

向下转型:需要强制转型

SuperMan sm = (SuperMan)p;

注意点:父类的真实对象必须是子类对象,否则会有问题
假设Person是父类

	//下面的是错误的
	Person p1 = new Person();
	SuperMan sm2 = (SuperMan) p1;

多态的好处和坏处:
好处:

  1. 提高了代码的维护性(继承保证)
    eg:在父类改一个属性不用每个子类都改属性
  2. 2.提高代码的扩展性(多态保证)
    eg:方法中使用父类为参数,来实现方法或者属性的调用

弊端:
父类不能使用子类的特有属性和行为

练习题:

			A a = new B();//多态方法运行看右边
	//*********永远都是看右边的,这里是多态访问方法,并不能使用就近原则
			a.show();
			B b = new C();
			b.show();
		}
	}
	class A{
		public void show(){
			show2();
		}
		public void show2(){
			System.out.println("我");
		}
	}
	class B extends A{
		public void show2(){
			System.out.println("爱");
		}
	}
	class C extends B{
		public void show(){
			super.show();//找父类的show方法,继续向上找
		}
		public void show2(){
			System.out.println("妳");
		}
	}

输出结果:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值