抽象类和上转型对象的关系,多态和上转型对象的关系

Part 1 抽象类和对象的上转型对象


1、abstract方法只允许声明不允许实现;

2、abstract不能用new运算符创建对象;

3、若一个非抽象类是某个抽象类的子类,则它必须重写父类的抽象方法并给出方法体(也可以继承这个abstract方     法);

4、不允许abstract和final同时修饰一个方法(理由见上条)

5、abstract类中可以有abstract方法也可以没有


总结:abstract类只关心操作(PS:只关心方法的名字、类型、参数),不关心操作实现的细节(PS:不关心方法体)


结合以上5条,我们可以从下面小代码理解。

<span style="font-size:14px;">package fundamental;

/*
 * 时间:1-4
 * 内容:多态,上转型对象,抽象
 */

//一个抽象类:花类
abstract class Flower {
	void bloom(){
		}
	}

//两个子类:玫瑰和百合
	class Rose extends Flower{
	void bloom(){
		System.out.println("玫瑰花开放了!");
		}
	}

	class Lily extends Flower{
		void bloom(){
			System.out.println("百合花开放了!");
		}
	}

public class Flower_Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Flower flower = new Rose();//flower是Rose的上转型对象
		   flower.bloom();
		   
		   flower = new Lily();flower是Lily的上转型对象
		   flower.bloom();
	}

}</span>

运行结果:

玫瑰花开放了!
百合花开放了!


注释:

1、啥是上转型对象?

介个一开始我也理解困难,一句话:子类创建一个对象,并把这个对象的引用放到父类的对象中

(PS:对象的上转型对象的实体是子类创建的,上转型对象会失去原对象的一些属性和功能,相当于子类对象的一个简化对象)。

如:

<span style="font-size:14px;">Flower flower = new Rose();//flower是Rose的上转型对象</span>
<span style="font-size:14px;">flower 实体 是子类Rose创建的,但是</span><span style="font-size:14px;">flower是父类Flower声明的! </span><span style="font-size:14px;"></span>
 

2、abstract类到底有啥作用啊?

作用:是大大地提高了程序设计的效率!!由于它只关心操作不关心操作的具体实现细节,程序设计者可以把主要精力花在程序的设计上,不必拘泥细节的实现,框架设计出来后,具体的子类子类设计有子类设计者完成,就像做数学题时思路有了,具体过程慢慢算去吧。。


Part 1 多态性和对象的上转型对象

多态性理解:父类的某个方法被其子类重写时,可以各自产生自己的功能行为

代码如上(不复制了)。

简单说明下,父类“花”的方法被子类“Rose” ,"Lily"重写了,“Rose” 说”玫瑰花开放了!“,但是"Lily"说”百合花开放了!“,相同的方法bloom(),子类对象不同产生的行为不同。(如果Lily说:玫瑰花开放了!——不是基因突变就是百合冒充玫瑰了大笑

这样理解多态是不是具体多了。。

注释:

1、用多态设计程序有啥好处呢?

可以体现程序设计所谓的开闭原则!!

介个做过项目的人都能深刻体会到,程序设计好后,首先应对abstract类的修改进行关闭,不然一旦修改abstract类

其所有子类都需要做出修改(有一次俺就这样悲剧了!刚学Java那会,俺就是个小白痴)。


2、啥是开闭原则?

开闭原则强调一个程序应当对扩展开放,对修改关闭。(——一般结论都是抽象的,难理解的,这是结论的通病么?)

PS:父类Flower有子类Rose ,Lily(百合) ,其他花也可以是它的子类比如郁金香,牡丹,霸王花……这些花可以继承父类Flower的方法(即对扩展开发),对修改关闭(见注释1案例原因)。


总结:Well,well……我以后不想写博文了,好累噻……

            如果有错别字啥的,呃,(尴尬

            以上个人理解,如有不同的见解,一起讨论下吧微笑微笑


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值