日期:2014-05-20  浏览次数:20910 次

抽象父类和普通父类区别?来看看我的代码,说说和抽象类有什么不同的?
public class Pet {

public void play(){                //这是宠物类,普通父类,方法里是空的

}

}

--------------------------
public class Cat extends Pet {    //这是子类,是一个猫类,重写了父类方法
public void play(){

System.out.println("猫爬树");
}

}
------------------------
public class Dog extends Pet {    //这是子类,是一个狗类,重写了父类方法
public void play(){
System.out.println("狗啃骨头");
}
}
-------------------------
public class Test {
public static void main(String[] args) {  //这是测试类,分别调用了子类的不同方法

Pet p1=new Dog();                               //多典型的多态表现啊,相当的给力
Pet p2=new Cat();

p1.play();
p2.play();

}

}

-----------------------
输出结果:
狗啃骨头
猫爬树
-----------------------
代码演示完了,我的问题就是,把父类改成抽象类,方法改成抽象方法,那么
public void play();//抽象方法没方法体

子类不变,依然重写父类方法,那这个跟普通父类没区别啊?
难道说就一个抽象方法没方法体就完事了??那我普通方法有方法体,我空着不写内容不就得了,不跟抽象方法一个样吗??

别跟我说抽象类还不能实例化,哥也不需要去new它!

普通类都能搞定的,还弄个抽象类有什么意义?我前面都说了普通类的方法我可以空着不写,达到跟抽象类方法没方法体一样的效果。
既然两种方式都能达到同一个输出效果,弄一种方式不就得了,那为什么还要创造出一个抽象类出来?难道是比普通类看着舒服?用着爽?还是更加便捷?还是为了强制让别人用的时候必须强制化实现抽象方法省的你忘了什么的?

谁能说说这俩有什么区别吗?

------解决方案--------------------
引用:
Quote: 引用:

就是为了强制不能实例化,以及强制子类必须实现方法
这不是你忘不忘的问题
你说你不去new它就行了,这话没错
那你想另一个问题,为什么要有访问控制呢?为什么要有private和public之分呢?
我可以全部public,不该访问的,我不访问就行了啊
小程序里,看不出什么区别,反而private成员要写一堆set和get函数,多麻烦,我自己写小程序的时候也会偷懒全部public
但是项目大了,代码多了,这种严谨的结构就很重要了
且不说会有很多人合作一起写一个程序,哪怕还是你一个人写,也保不住有忘记的时候,那时候编译器不报错,茫茫码海上哪找错误去
面向对象说到底就是方便你思考,模块化,易维护管理,硬要说没必要,整个面向对象都没必要了,C语言有什么干不了的呀,运行效率还高



大师,又是你啊,有缘分啊,那我明白了,简单理解,就是说人家给你设计好一个模版,为了帮你提醒用的,省的代码多了,你自己都容易忘了,但是这俩在运行的结果其实都是一样的,主要的作用是为了个写程序的人一种帮助提醒,省的你代码多了自己都找不出来了,是这样吧?



就是这样