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……我以后不想写博文了,好累噻……
如果有错别字啥的,呃,()
以上个人理解,如有不同的见解,一起讨论下吧